【问题标题】:WPF Line Of Business Application ArchitectureWPF 业务线应用程序架构
【发布时间】:2015-08-27 08:04:25
【问题描述】:

在我的公司(第一次),我们正在使用 WPF 用 C# 开发一个相当大的业务应用程序线。我决定采用类似于 Microsoft PRISM 中的 UI 模块化方法,但我对如何开发业务和数据层摸不着头脑。

我需要至少支持两个数据库:用于客户端/服务器安装的 SQL Server 和用于单用户安装的 SQLite,但我希望为其他数据库或云/rest 持久性解决方案做好准备。未来我们可能需要开发一个网页版和一个 UniversalApp 版!

我正在考虑的解决方案是:

  • WPFClient.MainShell (exe)
  • 其他 shell dll(引导、动态模块加载……)

  • 公司模块:

    • WPFClient.Companies.UI(视图模型和视图)
    • WPFClient.Companies.BIZ(用于验证的管理器 obj、对持久层的调用......)
    • WPFClient.Companies.Data(持久层的通用接口)
    • WPFClient.Companies.Entities(在 ui、biz 和数据层之间共享的实体)
  • 工人模块

    • WPFClient.Workers.UI(Workers 管理模块的视图模型和视图)
    • ...
    • WPFClient.Workers.Entities(在 ui、biz 和数据层之间共享的实体)
  • 其他模块(例如合同、访问等)

持久层的具体实现:

  • WPFClient.Data.SQLite(引用一个或所有模块的 X.Data 和 X.Entities dll 的具体持久层)
  • WPFClient.Data.SQLServer(引用一个或所有模块的 X.Data 和 X.Entities dll 的具体持久层)
  • WPFClient.Data.????

项目之间的引用是:

  • ModuleX.UI -> ModuleX.BIZ 和 ModuleX.Entities
  • ModuleX.BIZ -> ModuleX.Entities 和 ModuleX.Data
  • ModuleX.Data -> ModuleX.Entities
  • ...Data.SQLIte -> ModuleX.Entities, ModuleX.Data, ModuleY.Entities, ModuleY.Data, ...

当然具体的实现会通过ServiceLocator机制来解决。

我没有找到任何这样编写的 LOB 应用程序示例。我读了很多很多关于工作单元和实体框架、CQRS、等等等等的文章,但都是太多的理论!

这种架构有什么问题?是否有更好的解决方案或现实世界的示例可供参考?

为了更清楚:假设我必须保存一个工人的工作历史(或具有多个订单项的经典示例订单)。如果 biz 层“知道”它必须保存在多个存储库中,则意味着 biz 层知道持久性机制,因此它知道的太多了。但是如果 biz 层只是将命令(SaveWorkerInfo 或 SaveOrderInfo)传递给持久层,而不是持久层知道太多,而 biz 层只执行验证(我认为这是 CQRS 风格)。

非常感谢,我知道这篇文章很长!

【问题讨论】:

    标签: wpf architecture projects-and-solutions cqrs line-of-business-app


    【解决方案1】:

    我认为您的初稿看起来不错。观看this 视频,了解如何组织应用程序结构的一些灵感。在您的最后一个问题中,您提到了存储库等,我假设您对domain driven design 有所了解。我似乎需要重新考虑你的aggregates。阅读this CQRS 简介,您将知道该命令永远不会到达应用程序中的数据层。

    【讨论】:

    • 感谢您的信息,我一定会看看的。我阅读了很多文章,我认为我真正的问题如下:projections!假设我不能为我的应用程序使用实体框架。在一个模块中,我管理工人的详细信息,我只需要他以前工作的数量。在另一个模块中,我需要他的工作详细信息,但不需要,例如,他的地址详细信息。如何在不创建诸如 WorkerSimpleInfo、WorkerWithJobsCount、WorkerWithFullJobHistory 之类的“愚蠢”对象的情况下处理这个问题?在不使用 EF 的情况下如何告诉数据层我需要哪些字段?
    猜你喜欢
    • 2012-04-01
    • 2014-03-01
    • 2011-09-27
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2011-08-06
    相关资源
    最近更新 更多