role of a software architect
January 18, 2017 Leave a comment
As an architect we should always focus on these areas
- Envision: Software Architecture
- Model: Design Pattern
- Blueprint: Construction and Design Principles
- Inspect: Construction Patterns
- Nomenclature: Architect Jargon to communicate intent.
Software Architecture
- Web Server? Pipelined Architectures
- Cloud? N-Tier Network Architecture
- SOA? Component Architecture
- Client/Server? Layered Architecture
- Single Tier? Monolithic Architecture
Design Pattern
- Creational, Structural and Behavioral Patterns
- Creational DP:provide us a way to decouple the client from the objects that it needs to instantiate
Singleton, Factory, Builder - Structural DP: help us to compose classes or objects into larger structures
Decorator, Facade, Adapter, Proxy - Behavioral DP: dictates how classes and objects interact with each other and distribute the responsibilities
Strategy, Template, Iterator
- Creational DP:provide us a way to decouple the client from the objects that it needs to instantiate
- Plugins: Plugins enable you to execute code in response to certain events
Design Principles
- How does Encapsulation affects code reuse? Because it hides complex code which can easily be replaced with another code.
- How cohesion affects layers? High cohesion leads to better layered design
- How coupling affects scalability? Low coupling leads to more scalability
Construction Principles
- Favor composition(component design) over inheritance as it reduces number of dependencies between the modules which increases flexibility.
Layered and Tier Design? - Whats your developement methodology? 3-5 week sprint based on type of project.
- How to avoid architecture erosion? Do periodic code reviews, build unit/integration tests and do a nightly builds
Architect Jargon
- CAP Theorem: Consistency Avaliability Partition-Tolerance
- ACID Properties: Atomicity Consistency Isolation Durability
- Difference between a Component and a Module? A component is fine grained selft contained entity that can interact with remaining parts of system (like Data Access Layer), whereas module is coarse grained deployable source code bundle which shares a common purpose (like JSON Parser, Log4j, etc), replacing it would not impact overall system architecture
- Difference between Tier and Layer? Tier is a physical unit, where the code / process runs. E.g.: client, application server, database server; Layer is a logical unit, how to organize the code. E.g.: presentation (view), controller, models, repository, data access.
- Cohesion and Coupling: Cohesion is the degree to which the elements of a certain module belong together. Coupling is the degree of interdependence between software modules
References:
https://www.youtube.com/watch?v=t2Ti-pZGy8I
https://nofluffjuststuff.com/n/training/2017/02/20/software_architecture_training
Recent Comments