Oop 在何处放置与多个类交互的方法
我有一个名为Oop 在何处放置与多个类交互的方法,oop,design-patterns,Oop,Design Patterns,我有一个名为Contact的类和一个名为Account 我有一个方法叫做publicstaticaccountgetaccount(contactc){…} 这种方法最好放在哪里?我应该看什么样的设计模式 A) 接触类 B) 使用Account类 C) 使该方法在两个类中都可访问 D) 在其他地方?这取决于从联系人到帐户的查找是如何进行的,但我会投票支持将其放入一个使用存储库模式的新类中 Repository repo = ... Account account = repo.getAccou
Contact
的类和一个名为Account
我有一个方法叫做publicstaticaccountgetaccount(contactc){…}
这种方法最好放在哪里?我应该看什么样的设计模式
A) 接触类
B) 使用Account类
C) 使该方法在两个类中都可访问
D) 在其他地方?这取决于从联系人到帐户的查找是如何进行的,但我会投票支持将其放入一个使用
存储库
模式的新类中
Repository repo = ...
Account account = repo.getAccount(contact);
这样,您就可以有多个存储库实现,从数据库、HTTP请求或内部映射等中查找信息,而不必修改使用存储库的代码。我投票支持一个新类,尤其是当函数返回现有帐户对象时。也就是说,如果您有一组Contact实例和一组Account实例,并且此函数将一个实例映射到另一个实例,请使用新类封装此映射 否则,如果
GetAccount
返回一个从模板中填写的新帐户,那么它作为Contact
上的方法可能是有意义的。如果GetAccount
类似于Account类的工厂方法,或者Account类只是一种记录类型(其实例的生存期绑定到联系人的实例上),则此选项适用
作为帐户的一部分,我认为这是有意义的唯一方式,就是它作为构造函数是否有意义。对于您的问题,可能有很多好的答案。我会尝试一个答案,但这会让我的个人偏见根深蒂固
在OOP中,您通常看不到全局可访问(全局可访问)函数,这些函数与所有类断开连接,但可用于所有类。(静态方法可能是全局可用的,但它们仍然绑定到特定的类)。为了跟进dkatzel的回答,OOP is实例管理器中有一个常见模式。您有一个类或实例,该类或实例提供对数据库、文件存储、REST服务或保存联系人或帐户对象以供将来使用的其他位置的访问
您可能正在Python项目中使用持久性框架。也许是这样的:
一些持久性框架创建方便的方法实例方法,如Contact.getAccount()--将getAccount消息发送给联系人,该方法返回关联的Account对象。。。或者开发人员可以自己添加这些方便的方法
另一种方便的方法可以存在于类的静态端。例如,Account类可以有一个静态getAccountForContact()方法,该方法返回给定联系人对象的特定帐户。此方法将访问实例管理器,并使用contact对象中的信息查找正确的帐户
通常不会向名为getAccountForContact()的Contact类添加静态方法。相反,您应该在联系人上创建一个名为getAccount()的实例方法。然后,此方法可以调用Account.getAccountForContact()并将“self”作为参数传入。(或直接与实例管理器交谈)
我的指导原则通常是干巴巴的——不要重复你自己。我选择的选项消除了大部分复制粘贴代码。如果以这种方式定义方法,那么它实际上与两个类都没有联系。您还可以将其放在Util
类中:
public class AccountUtil{
public static Account getAccount(Contact c){ ... }
// you can put other methods here, e.g.
public static Contact getContact(Account a){ ... }
}
这遵循了在Java/C#中的Math
等实用程序类中对静态函数进行分组的模式
如果您想将函数绑定到一个清晰的类,请考虑这样设计类:
public class Contact{
public Account getAccount(){ ... } // returns the Account of this Contact
// other methods
}
在OOP中,通常建议尽可能避免使用全局函数。如果你想要一个静态函数,我会把它放在一个单独的类中