多层应用程序设计

本文关键字:程序设计 应用 | 更新日期: 2023-09-27 17:53:40

在每个人向我扔石头之前,我已经搜索了Google/MSDN/StackOver flow相关的问题和答案,但没有一个适合我的需求。

我正在开发一个相当大的c#应用程序- Windows窗体,目前分为以下几个部分:

  1. 数据层
  2. 领域层
  3. ui层

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

  1. 数据层的职责是与数据存储通信,基本上是CRUD操作。
  2. 领域层的职责是保持对象的模型,创建对象,应用业务规则等。
  3. ui层,基本上这是用户看到并与之交互的东西。

我的问题如下:

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

在用户输入之后,我调用一个驻留在Domain-Layer中的名为:AddExplorerNode(string name, string projectName, int projectNumber)的方法。该方法负责根据传入的参数创建一个ExplorerNode Object(一个"特殊的"TreeNode),它要求传入的参数实际上是有效的。

在对象被创建、清理、验证等之后,上面提到的方法将创建的对象传递给数据层,数据层将其推送到缓存存储库,如果缓存中一切正常,则将其持久化到数据存储库。

到目前为止,基本上所有东西都是分开的UI -> Domain -> DataLayer

我的问题是,我可以从

替换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)等

多层应用程序设计

您可以创建自己的类,它的工作方式与TreeNode类似,而无需实际成为TreeNode。

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

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