多层应用程序设计

Multi-tier Application Design

在大家向我扔石头之前,我已经搜索了 Google / MSDN / StackOver 流程​​以查找相关问题和答案,但其中 none 符合我的需要。

我正在使用 C# 开发一个相当大的应用程序 - Windows 目前分为以下几种形式:

  1. 数据层
  2. 域层
  3. UI-图层

基本上在我目前的情况下,这一层的作用如下

  1. 数据层的职责是与数据存储通信,基本上是 CRUD 操作。
  2. 领域层的职责是保存我们对象的模型、创建对象、应用业务规则等。
  3. UI-层,好吧,基本上这就是用户看到并与之交互的内容。

我的问题如下:

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

在用户输入后,我调用了一个名为:AddExplorerNode(string name, string projectName, int projectNumber) 的方法,它驻留在域层中。该方法负责根据传入的参数创建一个 ExplorerNode Object(一个 "special" TreeNode),它需要传入的参数实际有效。

在对象创建、清理、验证等之后 - 上面提到的相同方法将创建的对象传递到数据层,数据层将其推送到缓存存储库,然后将其保存到数据存储,如果缓存中一切正常。

所以到现在为止,基本上一切都是分离的 UI -> 域 -> DataLayer。

我的问题是,我可以替换

中域方法的签名吗

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

例如,如果明年我们将 WindowsForms 换成 Console Application,则该项目因事实上,控制台应用程序 将没有 TreeNode UI 组件。

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

提前致谢。

@编辑:

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

您可以创建自己的 class 以类似于 TreeNode 的方式运行,但实际上不是 TreeNode。

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

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