Architecture & Design - p-patel/software-engineer-knowledge-base GitHub Wiki

Architecture

N-tier architecture

- Presentation layer | Business Logic Layer (BLL) | Data Access Layer (DAL)

Service-oriented architecture

- https://visualstudiomagazine.com/articles/2018/01/02/service-design-patterns.aspx
	- Client app | (Facade Service / Mediator -> Services (single responsibility principle)) | BLL (manager classes) | DAL (repositories)

- https://social.msdn.microsoft.com/Forums/en-US/3ec68f3e-4948-4653-84b8-7b6f91f63c2d/service-layer-vs-business-layer?forum=architecturegeneral
	- service layer responds to presentation tier use case requests
	- service layer, business layer, manager classes

Microservices

- http://aka.ms/MicroservicesEbook
- https://www.youtube.com/watch?v=CZ3wIuvmHeM

Onion architecture / clean architecture

- http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
- https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
- https://github.com/ardalis/cleanarchitecture

Domain-driven design

- https://stackoverflow.com/questions/1222392/can-someone-explain-domain-driven-design-ddd-in-plain-english-please/1222488#1222488

Design

Design Patterns

- Where Creational patterns mostly describe a moment of time (the instant of creation), and Structural patterns describe a more or less static structure, Behavioral patterns describe a process or a flow

- mediator, facade, strategy

- Creational Patterns
Deal with object creation mechanisms and are used in situations when basic form of object creation could result in design problems or increase complexity of a code base

- Structural Patterns
Identify a simple way to realise relationships between entities or defines a manner for creating relationships between objects.
	- Repository Pattern
		- http://deviq.com/repository-pattern/

- Behavioural Patterns
Explains how objects interact. It describes how different objects and classes send messages to each other to make things happen and how the steps of a task are divided among different objects