There are two things about nopCommerce architecture that bother me a lot and I don't undersant why they are not the two most requested items by developers:
1.- nopCommerce is not transactional! most operations that require modifying the DB do several independent writes, some times, many writes. For every operations there are many chances that something fails and leaves the DB in an inconsistent state. In my experience it is the number one requirement for any software project that an operation should either succeed or fail, but never something in between.
Hasn't really anyone had troubles with this?
There are requests about this since April 2012, maybe earlier, but nothing has been done. Are there any plans to do this?
I see there is an issue scheduled for 3.70 which is to use async requests to third party services. I hope this includes DB requests, as they are the most common, but using the unit of work patter is far more important. In any case, moving to async and to uow can be done at the same time as I suggest in the issue.
2.- nopCommerce domain model is a big mess. Many entities have a lot of mixed concerns (Catalog, reviews, orders, payments, reporting, etc). This makes working with these entities very difficult and controllers and services have litteraly thousands of lines of code with many concerns mixed up. I think it's very important, before adding more features and more concerns on the existing models and services, to split them up in bounded contexts with limited concerns (as above, catalalog, orders, payments, reports, etc).
Number 1 is more imporant as it affects the reliability of the system and number 2, to me, would make nop a platform prepared for the challenges in the years ahead.
I would love to know the opinion on these topics from the nop team and the community.