Flashcards in Architecting .NET apps Deck (40)
What is a common problem in technology?
Learn something new and try to use it everywhere as at silver bullet.
What is an expert as per the bridge saying?
Anyone can design a bridge that stands, but it takes an engineer to design a bridge that *barely* stands. Meaning you need to spend just enough resources to solve the problem.
What are the reasons to select an architecture?
To: save money, effort and time. Instead of experimenting, challenging or improving the resume.
What are the 5 common "thinkings" of the astronaut assessment (head in the cloud)?
- We must use this shining technology for this!
- Reinvent the wheel.
- Never ORM.
- Always code to an interface.
- Use all the patters from the GoF book.
When is it allowed to introduce complexity to the application?
When it is JUSTIFIED. Ultimately we're paid for solutions, not code.
What is the Parkinson's Law?
Work expands to fill available time.
What the Parkinson's law means in the software development when a developer has tight timeline?
He comes with smart and simple solution to meet the deadline. Developers somehow pull it off.
How usually developers proves the Parkinson's law? Do they made things simpler?
By leveraging the SIMPLICITY: the art of maximizing the amount of work NOT done.
Why agile says about maximizing the work not done? Should we do everything right away?
You can wait as long as possible until the work is absolutely necessary (by then you might get more information that will help solving the problem).
What are the 6 aspects of the "Do the simplest thing that could possibly work"?
Note: This is listed in the extreme programming wiki.
Get done sooner.
Easier to communicate;
Duplication is obvious, so the need for refactoring is clearer;
Tests are easier to write;
Code is easier to performance tune;
You feel less stress, which enhances all of above.
What is the 80/20 rule?
Get 80% of the benefit by doing 20% of the work.
What does the agile manifesto say?
Maximize the work not done;
Welcome changing requirements, even late in development.
What are the 7 key lean principles?
1 - Eliminate waste;
2 - Amplify Learning;
3 - Decide as late as possible;
4 - Deliver as fast as possible;
5 - Empower the team;
6 - Build integrity in;
7 - See the whole.
What are the specifics of lean principles?
1 - Not adding value to the customer is likely waste;
3 - When the choice is unclear, choose the simplest one;
4 - Ideal architecture varies by team;
6 - Automated testing.
What is the main outcome of the minimum viable product?
The validated learning (user's feedback). Is about answering questions.
What is not part of a minimum viable product?
Usually expensive items, such as Scalability, beauty, code cleanliness, performance, security and if it even actually works.
What is the project triangle? Which one is usually sacrificed for the sake of others?
A triangle containing quality, date and cost... increasing any of the edges, will increase the others. Quality is usually sacrificed in form of technical debits.
What is the difference between hard and soft deadlines?
Hard: you have to hit the milestone due to, e.g make a published advertising
Soft: someone said so based on guess. The software architect usually explains to the non-tech people what are the implications.
What are common layers in software architecture? What are their equivalent terms?
- presentation aka UI;
- service aka API;
- Domain aka Business Logic;
- Persistence aka Data Access (DAL)
What is the difference between layer and tier?
layer is logical and tier is physical or virtual.
What are the pros and cons of tiers?
-Pros: Scalability, Security, Uptime, Reusability.
- Cons: Performance cost and Increased complexity.
How the layers are represented in .NET? What are the benefits?
Each layer is a csproj... business layer (and business layer.tests), data layer and presentation layer. The benefits are separations of concerns, abstract complexity, support testing via interfaces, minimize dependencies and enable reuse.
How does the layers are represented in a very simple app (e.g console app)?
Maybe methods are a suffice separation for such application.
What is the business logic layer?
Manages the behaviors that are triggered by the presentation layer. This layer shields the presentation layer from the persistence logic
What are the business layer patterns? From less to most complex?
Transaction script (procedural), table module, active record (both data driven) and domain model (business driven).
How the Transaction Script pattern work? When is it a good? What are the risks?
One public function per UI operation. Very simple but kind of procedural.
It is good for tight deadlines.
There is the risk of duplication and difficult to maintain overtime.
What is the Table Module pattern? Is it legacy?
Classes represent tables (datasets and datatables). Used to be very popular. Yes, it is legacy approach - replaced by entity framework.
What is the Active Record pattern? What are the pros and cons?
Each class instance represents a row (similar to dataset?). Class knows how to persist itself and contains business logic.
pros: simple, good for simple domain and CRUD applications.
cons: rigid domain (tied to DB), leads to swiss switchblade classes, low cohesion, hard to test and tricky transactions.
What is the domain drive design? What are the pros and cons.
It is about understanding the business and terms used not bothering with how the persistence layer will look like.
Pros: Manage complexity, leverage design patterns, speak business logic, abstract ugly db schema, compliments large teams and it is reusable.
Con: Learning curve, time-consuming design, long-term commitment (investment upfront), DB mapping overhead.
Note: Suggested book: Eric Evans - Domain Driven Design