最近,我开始着手一个新项目,团队正在考虑使用洋葱架构,我对此并不十分熟悉,所以我开始阅读有关它的文章。
该应用程序是一个简单的三维格式转换器。它将读取sql数据库,转换数据,然后将新格式写入另一个MySql数据库。第一个数据库本身非常复杂,但我不认为它是mather。应用程序的概念非常简单:从A读取、转换、写入到B。我不会为它提供任何服务或特殊的基础设施。
它将是一个桌面应用程序。
基于这些事实,我要求:
发布于 2016-05-31 21:13:29
在这种情况下,我不太确定洋葱结构是否有意义。
您可以从洋葱体系结构中保留的原则是,您的应用程序核心(译者)应该与数据访问分离。但总的来说,您的需求更像是一条管道。
read -> transform -> write
现在,读和写是不纯的(很难测试)。如果转换不直接调用写,则转换可能是纯的(易于测试)。因此,如果您通过让应用程序的核心(transform)返回要写入的数据,或者发布到队列/可观察/总线来实现解耦,那么您已经有效地隔离了您的核心,并使其可测试。这就是洋葱结构的原理。
关于你的问题:
在我看来,是否选择“公共”对象类型和更类似于数据库中的表示的两个对象类型是可能的,但不是严格的要求;这取决于数据的类型。您可以使用关系模型作为域模型,并将其转换为非规范化模型。(我看到许多应用程序在层间复制相同的对象,最终得到许多相同数据的表示;这不是一个很好的设计,海事组织。)
发布于 2016-05-26 20:25:46
您的输入数据库和输出数据库都位于第一层。
第二层将包含两个转换器,一个对应于第一层的每个数据库,在特定的数据库对象和“公共”(或“通用”)对象类型之间进行转换。
第三层,您的“应用程序”,操作公共对象。
你可以把它看作是一条弯曲成"U“形状的管道。
https://softwareengineering.stackexchange.com/questions/319559
复制相似问题