2013-08-02 12 views
2

我正在设计一个系统,在该系统中,我得到一堆处理后生成一些持续输出的输入。OO设计:如何在设计对象时决定方法参数与实例变量

说我需要做请求一些验证,我应该做它作为

选项1:

Validator validator = new Validator(); 
validator.validate(request); 

选项2:

Validator validator = new Validator(request); 
validator.validate(); 

我我目前使用选项1,因为它更容易将Validator实例注入到我的请求处理程序中类。 假设我需要从Validator调用多个方法,那么使用相同的参数多次调用验证器(对于不同的方法)感觉更具程序性。

一边想着这些之间作出选择,我也想出了一个第三个选项

Validator validator = Factory.createValidator(request); 
validator.validate(); 

在这个工厂注入到我的课。

当决定这些选项时,我应该指导什么。

+1

您可能会发现[Programmers.SE]是将来这类问题的好地方;它旨在用于“白板”问题,而不是“键盘”问题。 –

+3

我不是这方面的专家,但我相信如果你的验证器需要保持关于请求的状态,你应该使用选项2.否则,如果验证器是无状态的,则选项1更有意义。选项1的优点是您只需创建一次'validator'并在任何地方使用它;而选项2则需要在每次新请求需要验证时创建它。 – Amadeus

+0

还有另一种选择,即根本不创建实例,并使其变为静态。 'Validator.Validate(request)'如果方法是完全自包含的并且不需要状态,则可以使用此选项。 –

回答

6

我投给validator.Validate(request)。我的理由是,这更有意义的语义和自我记录。

对我来说,请求是什么被验证。所以验证器验证请求。代码几乎拼出来了。如果验证器验证多个不同的请求,这种方法变得更加适合。然而,如果请求在验证程序的生命周期内没有发生变化,可能会认为构造函数注入可能是更好的方法。

它也是可测试的。

0

如果验证器实例除了请求提供的请求之外没有任何状态(例如实例变量),则不需要实例化它。将Validate作为Validator类的静态方法实现。

ValidatorUtil.validate(request);