我一直在阅读许多架构,例如N-Layered,Onion,.......但我正在设计一个大型系统,该系统由一些大型数据库工作,并为其他应用程序/客户端提供大量服务。
另一方面,我们的系统必须设计得非常可扩展。我们系统中命名为模块或子系统的部分,拥有自己的模型,业务逻辑以及可能拥有的UI或服务。即使某些模块没有任何UI,也没有任何服务来提供系统服务,这些模块只是扩展了我们的系统。
我是设计师团队的成员,我正在思考我们系统的以下架构:
它是洋葱架构,但数据库的实体将在每个模块中定义。每个模块将由一个单独的团队开发。我们之间没有依赖关系,但我们的数据库是一样的!
我的担忧如下:
答案 0 :(得分:4)
当你说“大”时,我假设你正在谈论至少一百万行代码。假设这是正确的,你应该真正看一下SOA architecture来分离你的“模块”。根据您使用的语言,有许多很好的RESTful架构,非常适合公开数据库层服务。
不要执行代码级依赖,也不要让依赖项在数据库层进行爬行。强烈地将它们分离,并使模块通过网络层相互通信。这使他们保持高度独立,并限制任何一次改变的范围。
它还允许您同时在生产中使用多个版本,从而允许应用程序生态系统独立发展。
如果您有独立的UI,则尤其如此。要求所有利用您的核心应用程序同时升级的应用程序是一个后勤噩梦。
我们使用这种方法已经有好几年了,使用Restlet来公开核心数据库级服务,并让其他服务和应用程序使用它们。它非常有效,允许应用程序按照自己的计划进行演变和部署。
它还允许单独重构单个数据库“模块”。