c# - 可以在 C# 构造函数中调用数据库初始化吗?

标签 c# database constructor

<分区>

我看到这是各种代码库,想知道这是否通常不受欢迎。

例如:

public class MyClass
{
   public int Id;

   public MyClass()
   {
      Id = new Database().GetIdFor(typeof(MyClass));
   }
}

最佳答案

这通常不被认为是好的设计有几个原因,其中一些原因已经提到过导致困难的单元测试和处理错误的困难。

我选择不这样做的主要原因是您的对象和数据访问层现在紧密耦合,这意味着在原始设计之外对该对象的任何使用都需要大量返工。例如,如果您遇到一个实例,在该实例中您需要使用该对象而没有分配任何值,例如持久该类的新实例怎么办?您现在要么必须重载构造函数,然后确保所有其他逻辑都处理这个新情况,要么继承并覆盖。

如果对象和数据访问是分离的,那么您可以创建一个实例,然后不将其混合。或者,如果您有一个使用相同实体但使用不同持久层的不同项目,那么这些对象是可重用的。

话虽如此,我过去在项目中采用了更简单的耦合方式:)

关于c# - 可以在 C# 构造函数中调用数据库初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/159886/

相关文章:

c# - 在 sql server 2008 中实现数据库测试驱动开发的最佳方法是什么

c# - MVC3/ Razor 错误 : The view or its master was not found or no view engine supports the searched locations

mysql - Amazon AWS 或专用服务器上的数据库

iphone - Objective-c Iphone 如何设置属性的默认值

C++ std::shared_ptr 会初始化类中的其他成员数据

java - 在调用 super() 之前声明变量,但 super 必须是第一个语句

c# - ASP.NET Core IdentityServer4 - 声明列表

c# - 如何知道要在 Windows 中创建的下一个临时文件?

ios - 如何处理 sql server 数据库中的 iOS 表情符号?

php - 拉拉维尔 6.2 : I get the same Id from different data in index() method