gpt4 book ai didi

C# 设计问题

转载 作者:太空狗 更新时间:2023-10-29 21:36:49 25 4
gpt4 key购买 nike

<分区>

如何进行私有(private)方法的单元测试?

我有一个将员工数据加载到数据库中的类。这是一个示例:

>

public class EmployeeFacade   
{
public Employees EmployeeRepository = new Employees();
public TaxDatas TaxRepository = new TaxDatas();
public Accounts AccountRepository = new Accounts();
//and so on for about 20 more repositories etc.

public bool LoadAllEmployeeData(Employee employee)
{
if (employee == null)
throw new Exception("...");


bool exists = EmployeeRepository.FetchExisting(emps.Id);
if (!exists)
{
EmployeeRepository.AddNew();
}

try
{
EmployeeRepository.Id = employee.Id;
EmployeeRepository.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;
EmployeeRepository.SomeOtherAttribute;
}
catch() {}

try
{
emps.Save();
}
catch(){}


try
{
LoadorUpdateTaxData(employee.TaxData);
}
catch() {}

try
{
LoadorUpdateAccountData(employee.AccountData);
}
catch() {}
... etc. for about 20 more other employee objects

}

private bool LoadorUpdateTaxData(employeeId, TaxData taxData)
{
if (taxData == null)
throw new Exception("...");

...same format as above but using AccountRepository

}

private bool LoadorUpdateAccountData(employee.TaxData)
{
...same format as above but using TaxRepository
}
}

我正在编写一个应用程序来获取序列化对象(例如上面的 Employee)并将数据加载到数据库。

我有几个设计问题想征求意见:

A - 我称这个类为“EmployeeFacade”,因为我(试图?)使用外观模式。在类名上命名模式是好的做法吗?

B - 将我的 DAL 层类的具体实体称为“存储库”是否合适,例如“员工资料库”?

C - 以这种方式使用存储库是否明智,或者我应该在存储库本身上创建一个方法来获取员工,然后从那里加载数据,例如EmployeeRepository.LoadAllEmployeeData(员工雇员)?我的目标是有凝聚力的类,但这将要求存储库了解 Employee 对象,这可能不是很好?

D - 有没有什么好的方法可以不必在每个方法开始时检查对象是否为空?

E - 我有一个 EmployeeRepository、TaxRepository、AccountRepository 声明为公共(public)的用于单元测试目的。这些确实是私有(private)实体,但我需要能够用 stub 替换它们,这样它们就不会写入我的数据库(我重载了 save() 方法,什么都不做)。无论如何,还是我必须揭露它们?

F - 我如何测试私有(private)方法 - 或者是否已经完成(有些东西告诉我没有)?

G- "emps.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;"这违反了 Demeter 法则,但我该如何调整我的对象以遵守该法则?

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