3 ms·
Ironically, we're handling this with the concept called "clean code". We do have a core, which does implement the base logic. Everything in there is domain driv
by Fanmade 7y ago
Ironically, we're handling this with the concept called "clean code".
We do have a core, which does implement the base logic. Everything in there is domain driven, but only using DTOs and providing interfaces for input and output, using repositories and presenters.
When the data source changes, we only need to add the new repositories and set those within the context.
If we have to implement some specialized logic just for one client, we add this as a plug-in on top, so it is handled outside of the core logic.
Of course all of this is very abstract and since I've worked mostly with simple MVC concepts until now, I'm still struggling to get my head around this approach, but so far it's looking very well.
It may look overcomplicated at first, but there is a very strict while at the same time very flexible logic behind it, which can handle all the "creative" ideas our clients have so far, while still keep being maintainable.
It is a long process to get to this method of programming, but my initial scepticism has completely changed to "why haven't I worked like this before?".
- qlk1123 7y agoInteresting. I'm curious how long did your core system with basic-logic take to reach that maturity, and how many people involved? What kind of development model did you use? Also you state that you "still struggling to get my head around this approach," does it mean that the system somehow violates the principle of least astonishment? (https://en.wikipedia.org/wiki/Principle_of_least_astonishment https://en.wikipedia.org/wiki/Principle_of_least_astonishmen... )
- vonseel 7y agoThat’s pretty much the approach I would suggest and think works best. Thanks for your reply. Looking back, I think the place I worked had a lot of issues with how code was actually stored and maintained - different repositories for each client and each feature, for example, meant a lot of common code was simply copy/pasted when reused and that obviously made sharing bug fixes much more difficult or even impossible. Real dirty stuff. The solution isn’t all that complicated but when you’re on a services team with several hundred clients and hundreds of issues in your backlog, management focuses less on paving the way for the future and more on getting things done immediately. A few of us did implement a single code-bass / configurable framework for one big feature, but it was hard to get buy-in and convince people to use it - even if it reduced the workload from days or weeks to hours. The concepts from that were eventually re-packaged by management and sold by a more creative manager as an “SDK”, but I didn’t have the privilege of working on that team.