2012-07-12 28 views
0

首先我有一个类的签名看起来像这样:构造函数参数的正确数目是多少? /我怎么能结合这些类?

internal class JobStore : IJobStore 
{ 
    private readonly IFileHandler fileHandler; 
    private readonly IJobSerializer serializer; 
    private readonly IJobValidator validator; 
    internal readonly string DirectoryPath = "JobStore"; 
    internal readonly string JobExtension = ".job"; 

    public JobStore(IFileHandler fileHandler, IJobSerializer jobSerializer, IJobValidator jobValidator)... 

我有种想删除的目录路径,并延伸到自己的类,但我也不太清楚。 我确实认为在构造函数中有四个对象是一个坏主意。

我的问题是我怎么能结合这些对象中的两个,以减少我参加这个方法的参数的数量,是三太多?

道歉问题的模糊性。

+0

为什么你认为你应该限制你的参数? – 2012-07-12 19:26:18

+0

构造函数中有3个而不是4个对象。它有多个构造函数吗? – 48klocs 2012-07-12 19:27:37

+0

SRP - 我觉得有单一职责的班级不应该使用这么多的班级,这导致我想到三个班级 - 知道它是自己的目录+扩展可能有点多。 – Sean 2012-07-12 19:27:44

回答

4

看起来像你应该Refactor to Aggregate Services

+0

有趣。我认为fileHandler + job serializer会一起使用,因为它们总是一起使用? – Sean 2012-07-12 19:45:46

+0

这是非常好的建议。仔细考虑一下什么样的依赖关系集中在一起。 IJobSerializer可以在没有IJobValidator的情况下工作吗?如果没有,找到一种方法将它关闭(例如)IJobValidatedSerializer。 – 2012-07-12 19:50:53

+0

只是做了它,它工作得很好,做了一个保存器和一个检索器类(保存器包括验证,它存在于一个带有作业序列化器的类中)。 – Sean 2012-07-12 20:08:25

0

构造函数中的4个对象不是太多。没有特定数量的参数被视为“太多”

请注意,对于您可能会或可能不想使用您的构造函数的其他更多灰色条件,但具体的参数计数isn你的焦点应该放在哪里?

只要确保你类代表某种形式的名词,你会被罚款

0

你可以有多个参数的构造函数和它的确定。实际上,三是少数参数,也许你会有n个参数的方法和构造函数,只要你需要所有的参数。

0

如果您在使用时担心所需参数的数量,那么使用默认参数可能会有所帮助。

这样,如果您发现自己只更改一个或两个参数,并在其他时间使用默认值,那么在创建新参数时不必传递如此多的参数。

但是,这不会将参数从构造函数本身中取出。

所以,我不知道你在找什么,但也许这可能会帮助你。 :)

http://msdn.microsoft.com/en-us/library/dd264739.aspx

相关问题