让我们以一个在2D和3D之间投影和取消投影的类为例。
class Projector
{
Point2D projectPoint(const Point3D& worldPoint) const;
Point3D unProjectPoint(const Point2D& screenPoint, const Plane& plane) const;
};这两种方法都需要使用Camera对象。实现它的首选方式是什么:
A.在Projector构造函数中传递Camera。B.在每个类方法中传递Camera。C.在使用类方法之前在setter方法中传递Camera。
选项A打破了DI,因为相机是一种新产品。选项B表示每次调用都会传递相同的摄像头实例。在具有5-6个方法的接口中,将相同的实例传递给每个方法将导致不太美观的代码。选项C可以工作,但是它意味着这个类的用户需要知道他应该设置摄像头-有一个风险,他会忘记这样做,并且不会理解为什么代码不能工作。
实现它的首选方法是什么?
发布于 2014-05-11 07:06:03
我会在构造函数中传递相机,并将使用它的相机和投影仪作为该作用域中的实例。听起来范围是由“观点”定义的。
也许相机是视点,而投影仪是相机的单件?
对我来说,构造函数绝对是最好的。这可能是一个如何获得投影仪和/或相机的问题。您正在推断一个域约束,因此请编写约束代码。可能的限制是一个“视点”有一个摄像头,并且....投影仪。
https://stackoverflow.com/questions/23587185
复制相似问题