【问题标题】:3 layer architechture and little details like dropdown lists3 层架构和下拉列表等小细节
【发布时间】:2009-06-02 00:23:48
【问题描述】:

所以我以重构一个小应用程序为例来获得更多实践。该应用程序(假设)的目的是从“注册新用户”表单中收集数据,并将其保存在数据库中。我唯一的限制是我必须使用一个特殊的自定义数据访问类,它直接与数据库通信并在 DataTable 对象中返回数据(如果适用)。

我有一个关于表单的一些细节以及它们如何融入层架构的问题。例如,我的表单有一个从数据库提供的下拉列表,但同时下拉列表并不代表每个 SE 的对象(与作为对象的 User 不同,有一个类 User 有多个方法,数据成员等)。我不想在后面的代码中调用存储过程,但我也不希望过度抽象。

在不创建大量类抽象的情况下处理这些小细节的优雅方法是什么。

希望我说清楚

【问题讨论】:

    标签: c# design-patterns


    【解决方案1】:

    你应该问这个很有趣。我经历了那个问题here

    我回答的这些其他堆栈溢出问题显示了其他部分(切线相关):

    Getting ListView Data Items from Objects
    Working with ListViews
    Concatenating Properties in a DropDownList

    【讨论】:

      【解决方案2】:

      向 UI 获取非对象数据的一种选择是创建一个或多个查找类,这些查找类是一个存储桶或“服务”,用于获取诸如下拉列表等之类的奇数位数据...

      例子:

      myDDL.DataSource = Lookup.GetAllCountries(); // GetAllCountries 是一个静态方法
      // 设置名称/值字段等...
      myDDL.DataBind();

      使用这种方法,您仍然可以支持层分离。它不是面向对象或优雅的,但它非常实用。

      【讨论】:

      • 如果您在 UI 层内执行 DataBind() 不会破坏分离吗?我可能想多了,但如果我重写它,我不妨把它写对。
      • 我不确定我是否在关注你 - 设置 DDL 和执行数据绑定的逻辑属于 UI 层(表单代码/代码隐藏)。
      • 让我再解释一下 - Lookup 类是一个业务层或基础设施层类,它会像任何其他业务类一样调用数据访问层。这意味着 UI 层负责调用此业务层类并将其结果(在本例中为数据集)绑定到 DDL。这种绑定连接传统上被认为是 UI 层的适当职责。
      【解决方案3】:

      我不知道什么是最佳实践,但我所做的是我有一个实用程序类,它有一个方法将 DropDownList 对象和枚举作为参数,所以我这样做了

      FillDropDown(ddlistPhoneType, DropDownTypes.PhoneTypes);

      实用程序类有时会从数据库中填充下拉列表,有时会从 XML 中填充,有时还会填充一些硬编码的值。但至少 GUI 不必担心这一点。

      【讨论】:

      • 你传递枚举参数是为了什么?您是否在 FillDropDown() 函数中进行数据库交互?我正在使用存储过程,这使得它有点麻烦,因为我必须将参数、参数类型等传递到每个处理 db 的函数中,所以我正在寻找一种方法来减少麻烦。
      • 我们的大多数下拉值都在单个 XML 文件中,因此枚举映射到该 XML 文件的一部分。枚举只是为了让 GUI 开发人员更容易。 XML 文件有类似的东西: 下拉菜单往往有简单的值/文本数据对,所以你可以使用带有参数的单个存储过程,告诉它使用哪个数据源。
      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 2011-07-30
      • 2011-08-07
      • 1970-01-01
      • 2011-12-14
      • 2010-12-09
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多