C# OO设计建议-需求已经改变,那么如何重构当前的类呢?
最近提出了一项新要求,我想知道会推荐什么 我当前的设计有点像这样: 表示层:视图模型 服务层:WCF(从ORM类生成的类) 服务器模型层:ORM从DB生成的类 数据存储:关系数据库 一切正常,但现在我必须实现一个功能,我想知道我是否必须重新设计。下面是一个场景:我有一个Employee表,ORM生成到Employee类中,该表作为另一个Employee类映射到客户端层(模型),该类利用WCF通过EmployeeViewModel发送回服务器(它从该实体(Employee)的服务加载数据)以及其他相关数据(如通过其他类集合的下拉列表),此EmployeeViewModel反过来绑定到EmployeeView 我的雇员阶级是典型的,例如C# OO设计建议-需求已经改变,那么如何重构当前的类呢?,c#,oop,design-patterns,mvvm,C#,Oop,Design Patterns,Mvvm,最近提出了一项新要求,我想知道会推荐什么 我当前的设计有点像这样: 表示层:视图模型 服务层:WCF(从ORM类生成的类) 服务器模型层:ORM从DB生成的类 数据存储:关系数据库 一切正常,但现在我必须实现一个功能,我想知道我是否必须重新设计。下面是一个场景:我有一个Employee表,ORM生成到Employee类中,该表作为另一个Employee类映射到客户端层(模型),该类利用WCF通过EmployeeViewModel发送回服务器(它从该实体(Employee)的服务加载数据)以及其他
public partial class Employee: ViewEntity
{
// other properties e.g. FirstName, etc.
[Required]
public string? Address
{
get
{
return ADDRESS;
}
set
{
Validate(value, "Address");
ADDRESS = value;
OnPropertyChanged("Address");
}
}
// Other methods...
public static Employee CreateEmployee(IService service, string firstName, string lastName, string? address)
{
var emp = new Employee()
{
FIRST_NAME = firstName,
LAST_NAME = lastName,
ADDRESS = address
};
service.Create(emp);
return emp;
}
}
最初的要求是,当用户在表单(EmployeeView)中输入数据时,唯一需要的字段是FirstName、LastName和Address。在DB中,名字和姓氏不可为空,地址可为空。因此类遵循这种DB设计,因此地址/地址属性的类型为Nullable(string?),但正如您从我的客户机模型中看到的,我用[Required]注释修饰了地址属性,这似乎满足了要求
但是现在,我有了一个新的要求,用户可以从下拉列表中选择两个值中的一个,根据他们选择的值,地址要么是强制性的,要么不是强制性的
理想情况下,我希望使用所有相同的类,但不确定如何将此新需求合并到上述框架中。我是否必须在ORM级别创建一个新的Employee类,该类继承自Employee基类型,例如EmployeeWithAddress,然后让该新类通过我的服务和ViewModel进行遍历?或者创建新的视图模型和视图
任何建议都会有帮助。我不确定MVC和WCF之间的验证有何不同,但您可以考虑创建一个自定义验证程序。MVC使用System.ComponentModel.DataAnnotations进行验证。如果这适用于WCF,您可以尝试一下
这是一个我在MVC3项目中使用过的类似功能。谢谢你的提示,但我不相信这是我想要的。我看不出这个属性对我有什么帮助,也许只是看不到而已。你可以创建一个属性,比如“Required”就是“RequiredIf”。因此,在您的情况下,您有一个下拉列表来确定是否需要您的地址。假设您将该下拉值存储在名为Country的属性中。如果国家/地区值为“美国”,则需要地址。您的地址财产的装饰人应为[RequiredIf(“国家”,“美国”,ErrorMessage=“如果居住在美国,地址是必需的”]