4

如果我将“数据访问”方法放在业务对象上,我是否违反了单一职责原则 (SRP)?我的直觉是,如果类本身存在 Load 方法,那么 API 会感觉更加用户友好,而不必猜测该方法恰好在哪个类中?

例子:

public class Image
{    
   public static Image FromFile(string filename)
   {
       return ImageLoader.LoadImage(filename)
   }

   public void SetPixel(int x, int y, Color color)
   {
   }
 }
4

4 回答 4

3

我认为这本身没有问题,除了静态方法没有令人信服的理由存在于 Image 类中(因为它不依赖于类中的任何内容,而是依赖于类本身)。

如果你最终得到一堆加载方法,它们在不同的类中可能会更好

于 2009-03-20T20:50:26.587 回答
1

一般来说,我不认为知道如何通过单个路径(在这种情况下,从图像文件)创建自己的实例并确保有效状态必然会使 SRP 紧张。如果您有大量此类方法,那将是代码异味,然后您应该提示将它们分开。

于 2009-03-20T20:51:54.353 回答
1

我认为它是静态的这一事实使它不那么“令人震惊”地违反了 SRP,但我不是最大的 SOLID 纯粹主义者。这种启发式方法不应该过于虔诚地对待......

于 2009-03-20T20:53:35.097 回答
1

在某种程度上,是的,但它并不像你想象的那么糟糕。任何原则都可以被带到一个极端,使它不舒服。

问题是,如果稍后您希望将它们分开,因为您希望该静态应用于其他图像,或者您想要实现可能适用于其他类型数据的更复杂的方法,该怎么办。

一般来说,重构java很容易,我建议您使用现在有意义的方法,只要记住在它看起来可能导致您撤消复杂性时重新访问它。

于 2009-03-20T20:54:01.057 回答