c# - 对本课的建设性批评

标签 c# class-design

我刚刚查看了一些以前看起来像这样的代码

public class ProductChecker
{
     // some std stuff
     public ProductChecker(int AccountNumber)
     {
         var account = new AccountPersonalDetails(AccountNumber);
         //Get some info from account and populate class fields
     } 
     public bool ProductACriteriaPassed()
     {
          //return some criteria based on stuff in account class 
          //but now accessible in private fields
     }

}

现在已经添加了一些额外的标准,这些标准需要不在 AccountPersonalDetails 类中的数据

新代码看起来像这样

public class ProductChecker
{
     // some std stuff
     public ProductChecker(int AccountNumber)
     {
         var account = new AccountPersonalDetails(AccountNumber);
         var otherinfo = getOtherInfo(AccountNumber)
         //Get some info from account and populate class fields
     } 
     public bool ProductACriteriaPassed()
     {
          //return some criteria based on stuff in account class  
          // but now accessible in private fields and other info
     }

     public otherinfo getOtherInfo(int AccountNumber)
     {
        //DIRECT CALL TO DB TO GET OTHERINFO 
     }

}

我对数据库部分感到困扰,但人们能告诉我为什么这是错误的吗?或者是?

最佳答案

在您系统的分层 View 中,它看起来像 ProductChecker 属于业务规则/业务逻辑层,因此它不应该被用户交互功能“污染”(属于上面层)——这与你的情况密切相关——存储功能(属于下面层) )。

“其他信息”应该封装在它自己的存储层类中,并且该类应该是处理持久化/检索功能的类(就像我想象的那样 AccountPersonalDetails 正在为它自己做东西)。 “个人详细信息”和“其他信息”最好作为单独的类保存还是合并到一个类中,我无法从提供的信息中判断,但应该认真考虑并仔细权衡该选项。

保持层分离的经验法则有时可能会让人觉得僵硬,并且通常很想通过层的混合来简化它以添加功能——但是为了在系统增长时保持系统的可维护性和清洁性,我几乎每当出现这样的设计问题时,总是主张层分离。用 OOP 术语来说,就是“强内聚弱耦合”;但在某种意义上它比 OOP 更基础,因为它也适用于其他编程范例及其混合!-)

关于c# - 对本课的建设性批评,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454915/

相关文章:

c++ - 变长对象 : Ever a good idea?

c# - 抽象类中没有公共(public)成员

c# - 如何初始化尺寸在运行时决定的 C# 数组?

c# - "Incorrect syntax near ' = '"运行时错误 c# asp.net

c# - 无法在最新版本的 IdentityModel.Tokens 中设置有效受众

c# - 获取错误 : unsupported_grant_type using httpclient to post formdata in asp. 网络控制台应用程序

c# - 您将如何在 Java 或 C# 中编写高效的循环缓冲区?

c# - 在 Webrequest 和 WP8 中使用可移植类库

Java:如何考虑对马尔可夫链建模?

Java 类与 C++ 类