构造一个(某种程度上)复杂的对象

Gra*_*lin 8 .net c# dns constructor

当我创建类时,简单的构造函数往往是常态.在我目前的一个项目,一个电影库,我有一个Movie域对象.它有许多属性,导致构造函数如下:

public Movie(string title, int year, Genre genre, int length, IEnumerable<string> actors)
{
    _title = title;
    _year = year;
    _genre = genre;
    _length = length;
    _actors = new List<string>(actors);
}
Run Code Online (Sandbox Code Playgroud)

这并不可怕,但也不简单.是否值得使用工厂方法(static Movie CreateMovie(...))或可能是对象构建器?是否有用于实例化域类的典型模式?

更新:感谢您的回复.我最初可能是在思考这个问题,尽管我已经学到了一些在更复杂的情况下会有用的东西.我现在的解决方案是将标题作为唯一必需的参数,其余的作为命名/可选参数.这似乎是构建此域对象的全面理想方式.

LBu*_*kin 4

如果您使用的是 .NET 4.0,则可以使用可选/命名参数来简化接受多个参数的对象的创建,其中一些参数是可选的。当您想要避免许多不同的重载以提供有关对象的必要信息时,这非常有用。

如果您不使用 .NET 4,您可能希望使用该Object Builder模式来组装您的类型。对象生成器需要花费一些精力来实现,并与您的类型保持同步 - 因此这样做是否有足够的价值取决于您的情况。

我发现构建器模式在组装层次结构时最有效,而不是具有一堆属性的类型。在后一种情况下,我通常要么重载,要么使用可选/命名参数。