Design Patterns
-
Reflections on Clean Architecture Implementations with ORM
It has been a while since I started using and evangelising clean architecture concept for a lot of projects. I have witnessed they’re being successful. Customer maintenance teams happy continue to maintain them, less coupled, following TDD, etc. However, if I look back at the design documents of the very early projects I have done,… Continue reading
-
Power of Services: Decoupling Secrets for a More Flexible System Architecture
Services in Code Architecture Within the realm of Clean Architecture, a service denotes a module tasked with encapsulating business logic devoid of ties to the user interface, frameworks, or external entities like databases. In the Clean Architecture paradigm, services are meticulously crafted to house the fundamental application logic, ensuring its detachment from external intricacies and… Continue reading
-
On Callable Units of a Program (aka “methods”)
Recently someone asked a question in a forum on C#, showing an implementation they found on book and another implementation they were able to come up with and asking if their implementation is wrong, even though their implementation too compile and run without any problem and give the exact same output as the implementation from… Continue reading
-
DIP: Understanding the Levels
There is usually a confusion in understanding how to determine “low-level” modules while studying DIP (dependency inversion principle), the last one of the SOLID principles for object oriented design. High level modules should not depend upon low level modules. Both should depend upon abstractions. Robert C Martin Until I read the original article from Robert… Continue reading
-
LSP: Definition, Rules, Violations, and Implementation
This article was originally written to be published in ComSpective magazine. 11 Jul 2022 – Isham Introduction Behavioural subtyping is an object-oriented programming principle that subclasses should satisfy the expectations of clients accessing subclass objects through references of superclass type, not just in terms of syntactic safety (such as the absence of “method-not-found” errors), but… Continue reading
-
JWT Validation Middleware in ASP.NET Core
HTTP 440 ( Login Time-out) is a good and meaningful HTTP response code. Despite of that being unofficial and used only by a few Microsoft services – I found it very handy and meaningful to indicate if the JWT token is expired, rather than showing a 401 (Unauthorised) which is broad. In my opinion, HTTP… Continue reading
-
Convenience Methods, Golden Hammer and Boat Anchor
According to Wikipedia, Golden Hammer anti-pattern is a cognitive bias that involves an over-reliance on a familiar tool. Boat Anchor anti-pattern occurs due to developer’s belief or assumption that a piece of code is kept in the code base, assuming necessary in future (next week or next month), even though it is not mentioned in… Continue reading
-
Low-Code / No-Code API – Part 10 – Azure Logic Apps
Link to Part 1: https://programmium.wordpress.com/2020/08/10/low-code-no-code-api-part-1-azure-sql-serverless/ Link to webinar: https://tiny.cc/nocode-azure HOSTING THE BUSINESS LOGIC In part 1, I have explained about the serverless persistent storage for the B2B API. In this part lets see how we’re going to use Azure Logic Apps as the platform to host the business logic in serverless manner using low-code/no-code approach,… Continue reading
-
DESIGN PATTERNS FOR EXTENSIBILITY : DECORATOR PATTERN
In the previous post, I discussed about the need for “extensibility” and introduced “Strategy Pattern”. In this post, let me introduce you “Decorator Pattern” (aka Wrapper) and discuss it. Whenever I hear about word “Decoration” – Pakistani Trucks and Three-shaws come to my mind as they were decorated in every possible way. Unlike Strategy Pattern,… Continue reading
-
Design Patterns for Extensibility : Strategy Pattern
Technology is rapidly changing, thus the requirements are also changing expeditiously when it comes to software development. Adopting changes to the already written code is not an easy task. With the arrival of cloud and since there are so many options for the developers, the software needs to be expanded to fit the customer need… Continue reading
Recent Posts
- Comments on Service Locator (Anti Pattern)
- RESP – Redis Client Server Protocol
- Reflections on Clean Architecture Implementations with ORM
- Startup Process Internals of Python Apps on Azure App Service for Linux
- Power of Services: Decoupling Secrets for a More Flexible System Architecture
- Decoding the Clash: Navigating the Conflict Between Django LocMemCache and Uvicorn Workers
- Replace Conditionals with Polymorphism Requires At least One Conditional
- Django Logging Raw SQL Statements
- Learnings From Game of Life
- Django: From Response Content to InMemoryUploadedFile
- JSON Data Type on MySQL and PostgreSQL
- On Web Servers Handling Multiple Requests
- On Callable Units of a Program (aka “methods”)
- TDD and Type-safety
- DIP: Understanding the Levels
- LSP: Definition, Rules, Violations, and Implementation
- OData Responses in Camel-Case for Non-EDMs in ASP.NET Core
- JS Inspired C# Generator
- JWT Validation Middleware in ASP.NET Core
- Convenience Methods, Golden Hammer and Boat Anchor