如果我在业务对象上放置“数据访问”方法,我是否违反了单一责任原则(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)
{
}
}
答案 0 :(得分:3)
我没有看到这个本身的问题,除了没有令人信服的理由让静态方法存在于Image类中(因为它不依赖于类中的任何东西) ,但在班级本身)。
如果你最终得到一堆load-from方法,那么在不同的类中它们可能会更好
答案 1 :(得分:1)
一般来说,我不认为知道如何通过单一路径(在这种情况下,从图像文件)创建自己的实例并确保有效状态必然会使SRP变形。如果你有这样的方法,那将是一个代码气味,然后你应该把提示分开。
答案 2 :(得分:1)
我认为它是静态的这一事实使它不那么“恶劣”违反SRP,但我不是最大的SOLID纯粹主义者。这种启发式方法不应过于虔诚......
答案 3 :(得分:1)
在某种程度上,是的,但它没有您想象的那么糟糕。任何原则都可以达到极端,使其不舒服。
问题是,如果您希望将它们分开,因为您希望将静态应用于其他图像,或者您希望实现可能适用于其他类型数据的更复杂的方法,那该怎么办。
一般来说,重构java是很容易的,我建议你现在使用有意义的东西,并且只要记得它可能会导致你的复杂化,就会重新审视它。