I cringe every time I hear a dev say something is a ‘violation’ of one of the SOLID principles as … Continue reading SOLID principles are not laws
Is over-engineering on the developer maturity journey? Do you need to have written lots of over complicated apps to appreciate … Continue reading Is software architecture over-engineering on the developer maturity journey?
When creating an interface purely for the ability to mock I do like to keep both the class and interface … Continue reading Keeping interfaces just used for mocking in the same file as the implementation
I post about it a lot, but unnecessary complexity really is a silent productivity killer in our development lifecycles 👿 … Continue reading Three tips to help control unnecessary complexity in our software architecture
Personally I think MediatR can add unneeded complexity to a project but when using it one thing I like to … Continue reading Poll Results : Do you put MediatR command/query and related handler in same file?
Some common software development mistakes by Cory House on Twitter recently 👇 … Of course I’ve talked about things like … Continue reading Common under-engineering & over-engineering software development mistakes
If you’ve worked with me or followed me for a while it probably shouldn’t surprise you that I agree with Hadi’s … Continue reading Declare interfaces IF and WHEN they are needed, not ahead of time ‘just in case’
Developers are very quick to reach for a microservices based architecture these days because it’s popular or ‘it’s what Netflix … Continue reading If you don’t have the problems which microservices solve you don’t need microservices
I can definitely relate to the tweet below 👇🏻. When I first started architecting software I was obsessed with complexity … Continue reading Don’t over architect software by trying to fit as many patterns and popular approaches in as possible
Default Implementations in Interfaces were introduced in C#8 and allow us add new members to a public interface without breaking … Continue reading Poll Results : Have you used Default Implementations in Interfaces in C# 8+ yet?
I’ve seen the suggestion below before to avoid ORMS on the read side. This may be appropriate on occasion when you … Continue reading Should we avoid using ORMs on the read side of our model?
Think you might need Kubernetes (K8s) in your solution? Someone has created a site to help you determine if you … Continue reading Do I need Kubernetes (K8s)?
IMHO overengineering is a curse on our sector. I see it all the time, it often takes the form of … Continue reading How do you avoid overengineering when developing software?
For learning and discussion purposes I’ve done up a series of short articles looking at the architecture of eShopOnWeb which … Continue reading eShopOnWeb architecture article series (16 parts)
On a high level eShopOnWeb uses clean architecture. The main idea of clean architecture is that the solution is spilt … Continue reading eShopOnWeb Architecture (16/16) – uses clean architecture
We can see a nice example of the interface segregation principle in eShopOnWeb. For its repository interfaces eShopOnWeb have two … Continue reading eShopOnWeb Architecture (15/16) – has a really nice example of the Interface Segregation Principle
I love parameterized tests. Instead of adding many different test methods with different inputs set in the method body we … Continue reading eShopOnWeb Architecture (14/16) – uses parameterized tests
eShopOnWeb has a couple of its service classes (BasketService and OrderService) implement corresponding interfaces (IBasketService and IOrderService). These interfaces have … Continue reading eShopOnWeb Architecture (13/16) – has some single implementation interfaces
eShopOnWeb uses the repository pattern over Entity Framework ((I’m not getting into this debate again 😉). When we use this pattern we … Continue reading eShopOnWeb Architecture (12/16) – uses the repository and specification pattern
eShopOnWeb has a couple of uses of AutoMapper just so developers can see how to wire it up but in general … Continue reading eShopOnWeb Architecture (11/16) – uses AutoMapper
eShopOnWeb has some really low level tests which IMHO provide low or no value in terms of being able to … Continue reading eShopOnWeb Architecture (10/16) – has unit tests which test very low level implementation details
Aggregate roots are a central concept in Domain Driven Design. The idea is pretty simple and refers to how certain entities … Continue reading eShopOnWeb Architecture (9/16) – uses the Aggregate root pattern to ensure child objects are not manipulated out of context
To improve performance eShopOnWeb uses IMemoryCache to implement in memory caching to prevent queries being sent to the Database for … Continue reading eShopOnWeb Architecture (8/16) – uses in memory caching to avoid sending unnecessary queries to the DB
Another example of encapsulation but this time on the navigation collection level is seen in eShopOnWeb with the use of … Continue reading eShopOnWeb Architecture (7/16) – encapsulates navigation collections so consumers can’t edit them directly
eShopOnWeb has some really nice examples of encapsulation. The particular example below is the CatalogItem class. Click on the image … Continue reading eShopOnWeb Architecture (6/16) – uses private setters and non default constructors to support encapsulation which helps keep the model valid