在每个人向我扔石头之前,我已经在Google / MSDN / StackOver流程中搜索了相关的问题和答案,但这些都不符合我的需求。
我正在使用C#中的一个相当大的应用程序 - Windows窗体目前分为以下几种:
基本上在我目前的情况下,这些层的角色如下
我的问题如下:
用户可以从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)等。
答案 0 :(得分:1)
您可以创建自己的类,其行为方式与TreeNode类似,而不是实际上是TreeNode。
class TreeNodeModel
{
public string Name { get; set; }
public string ProjectName { get; set; }
public int ProjectNumber { get; set; }
}
然后,您可以在UI中编写一个方法,将TreeNodeModel映射(复制)到实际的TreeNode。