在我的情况下哪个名称更正确:经理或工厂(或其他)?

时间:2009-12-01 10:24:06

标签: naming variable-names

我有下一个代码:

PhotoFactory factory = PhotoFactory.getFactory (PhotoResource.PICASA);
PhotoSession session = factory.openSession (login, password);
PhotoAlbum album = factory.createAlbum ();
Photo photo = factory.createPhoto ();
album.addPhoto (photo);
if (session.canUpload ()) {
   session.uploadAlbum (album);
}
session.close ();

我不确定我是否选择了正确的名字。这不是那么重要,但我只是好奇你在我的案例中选择了什么。另一个版本是经理:

PhotoManager manager = PhotoManager.getManager (PhotoResource.PICASA);
PhotoSession session = manager.openSession (login, password);
PhotoAlbum album = manager.createAlbum ();
Photo photo = manager.createPhoto ();
album.addPhoto (photo);
if (session.canUpload ()) {
   session.uploadAlbum (album);
}
session.close ();

UPD:我刚刚在hibernate javadocs上找到了下一个例子:

 Session sess = factory.openSession();
 Transaction tx;
 try {
     tx = sess.beginTransaction();
     //do some work
     ...
     tx.commit();
 }

这是一个命名错误吗?

2 个答案:

答案 0 :(得分:1)

在非常高的层次上,如果它只负责创建类的实例,我称之为工厂;和管理者是否需要监督对象的持续存在,以及它们与其他对象的关系等。

在您发布的代码段中,您只是创建了对象,因此,在我看来,Factory是一个合适的名称。虽然你应该记住班级的概念职责是什么,以及他们将来是否会扩展。

也就是说,我经常希望工厂不必担心自己创建会话,而是根据需要将会话传递到createFoo个调用中,因此在设置时肯定会有一些软糖因素。我个人认为我会有一些其他抽象实体负责创建会话,然后将它们传递到PhotoFactory。

答案 1 :(得分:0)

我会选择第二个解决方案(管理器),因为以“Factory”结尾的对象通常被认为是工厂模式的实现,它实际上创建了对象的新实例。在您的示例中不是这种情况,因为它管理特定服务的会话。

在这个例子中有什么好处,实际上你的第一个静态方法调用getManager实际上是一个工厂,因为它创建了Manager个对象的实例。