gpt4 book ai didi

c# - OO 设计建议 - 需求发生了变化,那么如何重构当前类?

转载 作者:行者123 更新时间:2023-12-03 10:50:01 27 4
gpt4 key购买 nike

最近提出了一项新要求,我想知道会推荐什么。

我目前的设计看起来有点像这样:
表示层:View-ViewModel-Model
服务层:WCF(从 ORM 类生成的类)
服务器模型层:来自 DB 的 ORM 生成的类
数据存储:关系数据库

一切正常,但现在我必须实现一个我想知道是否必须重做设计的功能。这是场景:我有一个 ORM 生成到 Employee 类中的 Employee 表,该表又作为另一个 Employee 类映射到客户端层(模型),该类利用 WCF 通过 EmployeeViewModel 发送回服务器(它从服务中加载该实体(员工)的数据和其他相关数据(例如通过其他类的集合的下拉列表),然后此 EmployeeViewModel 绑定(bind)到 EmployeeView。

我的 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。在数据库中,FIRST_NAME 和 LAST_NAME 不是 NULLABLE,ADDRESS 是 NULLABLE。因此,这些类遵守此 DB 设计,因此 Address/ADDRESS 属性的类型为 Nullable(字符串?),但正如您从我的客户模型中看到的那样,我用 [Required] 注释装饰了 Address 属性,这似乎就足够了要求。

但是现在,我有一个新要求,用户可以从下拉列表中选择两个值之一,并且根据他们选择的值,地址是强制性的或非强制性的。

理想情况下,我想使用所有相同的类,但不确定如何将这个新要求合并到上述框架中。我是否必须在继承自 Employee 基类型的 ORM 级别创建一个新的 Employee 类,例如EmployeeWithAddress,然后让这个新类通过我的服务和 ViewModel 涓涓细流?或者也许创建新的 ViewModels 和 Views?

任何意见将是有益的。

最佳答案

我不确定 MVC 和 WCF 之间的验证有何不同,但您可能会考虑创建自定义验证器。 MVC 使用 System.ComponentModel.DataAnnotations 进行验证。如果这适用于 WCF,您可以尝试一下。

这是 article我曾经在我的 MVC3 项目中获得类似的功能。

关于c# - OO 设计建议 - 需求发生了变化,那么如何重构当前类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com