Software Design and Architecture

Step by step guide to learn software design and architecture

JКомпетенции уровня JuniorMКомпетенции уровня MiddleSКомпетенции уровня SeniorTКомпетенции уровня Техлид1-3Уровень владения технологиейClean CodeProgramming ParadigmsObject Oriented ProgrammingDesign PrinciplesDesign PatternsArchitectural PrinciplesArchitectural StylesArchitectural PatternsEnterprise PatternsClean Code PrinciplesProgramming ParadigmsObject Oriented ProgrammingDesign PrinciplesDesign PatternsArchitectural PrinciplesArchitectural StylesArchitectural PatternsEnterprise PatternsBe ConsistentMeaningful names over CommentsIndentation and Code StyleKeep methods, classes, files smallMinimize cyclomatic complexityPure functionsAvoid passing nulls, booleansKeep framework code distantTests should be fast and independentUse correct constructsOrganize code by the actor it belongs toUse meaningful namesKeep it simple and refactor oftenCommand Query SeparationStructured ProgrammingFunctional ProgrammingObject Oriented ProgrammingModel-Driven DesignParadigm FeaturesPrimary PrinciplesComposition over InheritanceEncapsulate what variesProgram against abstractionsHollywood principleDRYSOLIDYAGNIGoF Design PatternsPoSA PatternsComponent PrinciplesPolicy vs DetailCoupling and CohesionBoundariesMessagingDistributedStructuralSOACQRSDomain-Driven DesignModel-View ControllerMicroservicesBlackboard PatternMicrokernelServerless ArchitectureMessage Queues / StreamsEvent SourcingDTOsIdentity MapsUse CasesRepositoriesMappersTransaction ScriptCommands / QueriesValue ObjectsDomain ModelsEntitiesORMsDomain ModelsAnemic ModelsLayered ArchitecturesDomain LanguageClass InvariantsAbstract ClassesConcrete ClassesScope / VisibilityInterfacesInheritancePolymorphismAbstractionEncapsulationEvent-DrivenPublish-SubscribeClient-ServerPeer-to-PeerComponent-BasedMonolithicLayered

Software Design Architecture

Software design architecture is the process of defining the overall structure and organization of a software system. It involves determining the components, interfaces, and relationships between those components that are needed to meet the requirements of the system. The architecture of a software system sets the foundation for the design and implementation of the system, and it plays a crucial role in determining the quality and maintainability of the final product.

There are several different architecture styles and patterns that can be used to design a software system, including:

  • Layered architecture
  • Microservices architecture
  • Event-driven architecture
  • Service-oriented architecture (SOA)
  • Domain-Driven Design (DDD)

Each architecture pattern or style has its own set of advantages and disadvantages, and the choice of architecture will depend on the specific requirements of the system and the constraints of the project.

Learn more from the following links: