用于存储全局常量、变量和helper方法以在类之间共享的模式


Patterns for storing global constants, variables, and helper methods to share amongst classes

我很好奇用什么模式来存储类之间共享的常量和变量。我试图避免传递容器或利用包含在根应用程序中的全局helper文件。我认为常量可以在接口中声明并由所有组件实现,但这并不能解决变量或方法的问题。继承超类是不可能的。

示例:假设我们正在为常见的HTTP方法定义常量:HTTP_GET, HTTP_POST等。您希望所有组件确保它们与相同的定义进行比较(例如:'Get' vs 'Get' vs 'Get'等等)

共享常量可以定义为静态变量,但接下来要问的问题是哪个类应该包含它们?我见过很多专门用于此的常量类,但它们很快就退化为混乱的一团。最好是把他们单独放在最认同他们的类型上。例如,如果您有一个名为HttpRequest的类,那么您的请求方法常量将适合HttpRequest.GETHttpRequest.POST。如果没有任何一个类比其他类更能识别这些常量,那么至少创建一个类来对像HttpRequestMethods.POSTHttpRequestMethods.GET这样的常量进行分组。

如果你有共享变量,一定要用setProperty方法封装它们,使它们的修改线程安全,因为两个或更多的合作者可以同时修改变量。对于包含访问器方法的类,您可能希望使用单例模式,而不是静态地公开访问器方法,以便在共享对象上公开共享变量。这样,您就可以在需要时使用OOP的好处。单例模式可能会抑制可测试性,因此可以考虑使用IOC容器,它将创建该对象的一个实例,并将其注入需要访问这些共享变量的所有协作者中。