设置“this"等于构造函数中的现有对象
本文关键字:构造函数 对象 this quot 设置 | 更新日期: 2023-09-27 18:14:44
一个奇怪的问题,但我希望有一些东西可以帮助缩短这个过程,否则我将不得不为每个项目做很多很多次。
我们已经在办公室向MVC转变,所以我们现在正在为我们所有的对象构建"实体类"。为了加强某些级别的可重用性,我将实体的核心功能从数据库中分离出来,但这给构造函数带来了一个特殊的问题。我编写DAL部分的方式是作为一个独立的静态类(也有助于将其隐藏在外部世界),它只返回我需要的对象……但是我必须通过构造函数将这些字段复制回类中,我希望有更好的方法。
public class MyObj{
public int ID { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public DateTime CreateDate { get; set; }
public MyObj(int prmId){
List<MyObj> raw = DAL.get(prmId);
if(raw.Count != 1)
throw new Exception("Invalid number of objects returned");
ID = raw[0].ID;
Name = raw[0].Name;
IsActive = raw[0].IsActive;
CreateDate = raw[0].CreateDate;
}
static class DAL {
public static List<MyObj> get(int? prmId){
// database stuff to call a Stored Procedure and return 0 or more MyObjs
}
}
}
当我从raw[0]中复制所有内容时,是否有一种方法可以说"this = raw[0]"?
我在许多实体中使用相同的结构,因此任何快捷方式都将非常感谢。
你犯了一些架构上的错误:
第一个是领域模型实体必须不知道它必须如何保存/加载。所以你违反了单一责任原则。您必须在它们之上有一个存储库或其他模式来处理持久化逻辑。
第二个错误是,一般来说,您已经在域模型实体中引入了具体的依赖关系(DAL类被视为域模型实体中的具体类型)。这是一个坏习惯,你违反了控制反转原则和一般所说的"代码高于抽象而不是具体实现"的规则。
你可以有一个静态的GetObject而不是在构造函数中分配所有属性。
public class MyObj{
public int ID { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public DateTime CreateDate { get; set; }
public static MyObj GetObject(int prmId){
var obj = DAL.get(prmId).FirstOrDefault();
return obj != null ? obj : new MyObj();
}
}
static class DAL {
public static List<MyObj> get(int? prmId){
// database stuff to call a Stored Procedure and return 0 or more MyObjs
}
}