多层应用程序设计

时间:2016-06-30 15:55:36

标签: c# separation-of-concerns n-tier-architecture

在每个人向我扔石头之前,我已经在Google / MSDN / StackOver流程中搜索了相关的问题和答案,但这些都不符合我的需求。

我正在使用C#中的一个相当大的应用程序 - Windows窗体目前分为以下几种:

  1. 数据层
  2. 域的层
  3. UI-层
  4. 基本上在我目前的情况下,这些层的角色如下

    1. 数据层的责任是与数据存储进行通信,基本上是CRUD操作。
    2. Domain-Layer的责任是保存对象的模型,创建对象,应用业务规则等。
    3. UI-Layer,基本上这就是用户看到并与之交互的内容。
    4. 我的问题如下:

      用户可以从UI层访问以下字段:名称,项目名称,项目编号,基本上是文本框,日历等 - 所有这些都是UI组件。

      在输入用户之后,我调用了一个名为AddExplorerNode(string name, string projectName, int projectNumber)的方法,该方法位于域层中。此方法基于传递的参数负责创建 ExplorerNode对象 (“特殊”TreeNode),该要求传递的参数实际上有效。

      在创建,清理,验证对象之后 - 上面提到的相同方法将创建的对象传递给Data-Layer,Data-Layer将其推送到Cache-Repository,然后如果一切都进行了将其持久化到数据存储在缓存中确定。

      所以直到现在,基本上所有东西都是分开的UI - >域名 - >数据层。

      我的问题是,我可以从

      替换Domain方法的签名吗?

      AddExplorerNode(string name, string projectName, int projectNumber)AddExplorerNode(TreeNode node)并根据TreeNode对象及其属性构造我需要的实际对象?我问这个是因为,如果Domain-Layers知道UI(在本例中是TreeNode UI组件),我们基本上就会打破分离。

      例如,如果我们明年将 WindowsForms 交换为控制台应用程序,那么由于控制台应用程序将没有TreeNode UI组件。

      在这种情况下,最好是有一个域方法,它采用例如5-10个参数(int,字符串等)并基于这些参数来创建我的对象或用TreeNode UI组件替换参数?

      提前谢谢。

      @EDIT:

      我问这个问题,因为我的一位同事审查了我的代码并开始重构它。通过重构,他将实际的TreeNode UI组件暴露给域层。我的方法是AddExplorerNode(字符串名称,字符串projectName,int projectNumber)等。

1 个答案:

答案 0 :(得分:1)

您可以创建自己的类,其行为方式与TreeNode类似,而不是实际上是TreeNode。

class TreeNodeModel
{
    public string Name { get; set; }
    public string ProjectName { get; set; }
    public int ProjectNumber { get; set; }
}

然后,您可以在UI中编写一个方法,将TreeNodeModel映射(复制)到实际的TreeNode。