我正在努力想出如何在我试图创建的DTO映射器中实现工厂模式.我很确定我需要重新考虑我的设计.这是我正在运行的一个非常小的例子:
public abstract class Person
{
public string Name { get; set; }
public decimal Salary { get; set; }
}
public class Employee : Person
{
public Employee()
{
this.Salary = 20000;
}
}
public class Pilot : Person
{
public string PilotNumber { get; set; }
public Pilot()
{
this.Salary = 50000;
}
}
public static class PersonFactory
{
public static Person CreatePerson(string typeOfPerson)
{
switch (typeOfPerson)
{
case "Employee":
return new Employee();
case "Pilot":
return new Pilot(); …Run Code Online (Sandbox Code Playgroud) 我正在设计API.我想知道我提出的是一个很好的解决方案:
我有一个存储库类型的数据层,通过将业务类转换为实体(从LLBL GEN生成,我不想直接使用实体作为我的业务对象,与数据库对话,因为我想保持它们简单并允许我交换到Entity Framework或其他一些mapper是我需要的)
我有一个WCF服务层,我正在使用它作为一种外观.它调用存储库层并将业务对象转换为DTO,并通过API服务调用将它们传递给客户端.客户端可以是ASPX网站,Silverlight应用程序,WPF应用程序,甚至是WP7应用程序.我保持运行的问题是当我想运行业务逻辑时,我必须将DTO发送回WCF服务然后再返回客户端.这对我来说似乎并不"正确".我不能把业务逻辑放在DTO中,因为这会破坏目的.但是,如果我希望在客户端上运行业务类型代码,那么在我的不同客户端中我会有大量的代码重复.
我的业务层不知道数据层,我的数据层知道业务层,我的外观层知道数据层和业务层以及DTO.这对API来说是一个糟糕的设计吗?任何人都可以给我任何建议吗?我只是通过在线阅读不同的文章了解了企业级应用程序.
谢谢!
我试图找出最好的方法来设计我的枚举.假设我有一个类和枚举:
public enum ActionType
{
Acceptable = 1,
Unacceptable = 2,
PendingReview = 3
}
public class Report
{
public ActionType Action { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
假设我还有一个存储不同动作类型的数据库表:
Id Action
1 Acceptable
2 Unacceptable
3 PendingReview
Run Code Online (Sandbox Code Playgroud)
如果我想在以后添加其他类型的操作,我将不得不更新枚举并重新部署程序集.但我喜欢枚举减少错误,使代码更易于阅读以及保证向前兼容性的方式.什么是一种有效的方式来处理新的动作类型?
谢谢!