多层应用程序设计
Multi-tier Application Design
在大家向我扔石头之前,我已经搜索了 Google / MSDN / StackOver 流程以查找相关问题和答案,但其中 none 符合我的需要。
我正在使用 C# 开发一个相当大的应用程序 - Windows 目前分为以下几种形式:
- 数据层
- 域层
- UI-图层
基本上在我目前的情况下,这一层的作用如下
- 数据层的职责是与数据存储通信,基本上是 CRUD 操作。
- 领域层的职责是保存我们对象的模型、创建对象、应用业务规则等。
- 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。
在大家向我扔石头之前,我已经搜索了 Google / MSDN / StackOver 流程以查找相关问题和答案,但其中 none 符合我的需要。
我正在使用 C# 开发一个相当大的应用程序 - Windows 目前分为以下几种形式:
- 数据层
- 域层
- UI-图层
基本上在我目前的情况下,这一层的作用如下
- 数据层的职责是与数据存储通信,基本上是 CRUD 操作。
- 领域层的职责是保存我们对象的模型、创建对象、应用业务规则等。
- 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。