c# - 我应该如何构建数据驱动的 Win 表单解决方案?

标签 c# winforms architecture

我正在编写一个 Windows 窗体应用程序,该应用程序正在发展并变得相当广泛。

最初我认为最好的方法是分别为图形组件和一个业务逻辑项目以及一个数据访问项目。

随着应用程序变得越来越大,我开始认为更加模块化的方法会更简洁……例如包含每个“类别”数据的用户控件、业务逻辑和数据访问的项目。

例如...与产品相关的 DAL 对象以及单个项目中关联的业务对象和用户控件。这最终会在解决方案中包含更多的项目,每个项目都是独立的。

然而,这可能会导致更多的复杂性,因为数据经常链接(产品表与供应商表、订单表和零件 list 表等链接),因此很难完全抽象每个类别。

网上有数百篇软件架构文章,但能帮助您将该架构转化为解决方案、项目和代码的文章并不多。

谁能指出我正确的方向?

最佳答案

我会将 UI、数据和业务层保留在不同的项目中。这实质上减少了紧耦合的机会——例如,UI 代码直接使用数据层等。现在,如果你想垂直划分它,那么你也可以这样做,即产品将有三个项目 UI、Business & Dal 和很快。这里可能有多种考虑因素:

  1. 为什么要垂直分离 - 您是否看到可能的独立重用?如果否,则避免划分。
  2. 如果你必须划分那么你可以选择划分,比如从管理的角度只划分 UI 层,因为它可能有很多代码
  3. 或者你可以划分所有层,但粗粒度。例如,Products 及其子项。

就跨类别引用而言,它们无法避免,但必须通过记录良好且设计良好的契约(Contract)来完成。例如,Orders UI 可能会调用 Products BL 来获取产品列表(请注意,许多其他 UI 组件将使用相同的方法来实现类似的功能)。

关于c# - 我应该如何构建数据驱动的 Win 表单解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492678/

相关文章:

c# - 为什么 C# 允许在 case 之后而不是之前的语句?

c# - ASP.NET Identity - 未调用自定义角色验证

c# - Visual Studio 中没有父窗体的设计面板

optimization - 直接从数据库或缓存生成网页?

android - 适用于 Android 和移动设备的 TDD

c# - 用于创建实时应用程序的 ASP.net/C# 书籍

c# - 如何从后台代码调用 App_Code 文件夹中的类?

c# - 制作启动画面

c# - 为什么我的按钮的 'Validating' 事件处理程序从未被调用?

c# - 从摘要访问身份验证中导入登录名和密码