关于如何将其重构为体面的模式,我遇到了一个小问题。

public class DocumentLibrary
{
    private IFileSystem fileSystem;
    private IDocumentLibraryUser user;

    public DocumentLibrary(IDocumentLibraryUser user) : this(user, FileSystemFrom(user)) { }

    public DocumentLibrary(IDocumentLibraryUser user, IFileSystem fileSystem)
    {
        this.user = user;
        this.fileSystem = fileSystem;
    }

    public void Create(IWorkerDocument document)
    {
        document.SaveTo(fileSystem);
    }

    public IWorkerDocument AttemptContractRetrieval()
    {
        return new Contract(fileSystem, user);
    }

    public IWorkerDocument AttemptAssignmentRetrieval()
    {
        return new Assignment(fileSystem, user);
    }

    private static IFileSystem FileSystemFrom(IDocumentLibraryUser user)
    {
        var userLibraryDirectory = new DirectoryInfo("/DocLib/" + EnvironmentName() + "/" + user.Id);
        return new FileSystem(userLibraryDirectory);
    }

    private static string EnvironmentName()
    {
        using (var edmxContext = new Entities())
        {
            return (from setting in edmxContext.EnvironmentSettings
                         where setting.Name == "EnvironmentName"
                         select setting.Value).First();
        }
    }
}


我有两种类型的工作程序文档,但是我似乎无法轻松地将上述两种方法(AttemptContractRetrievalAttemptAssignmentRetrieval)重构为一个体面的形式。

任何帮助将非常感激。

问候,
吉姆

最佳答案

就个人而言,我会考虑使用工厂方法的工厂模式或构建器模式。

在企业库解决方案中可以很好地使用工厂模式,例如:
Database.CreateDatabase();
我会说这将是最直接的整合方法。

如果选择了Builder模式,并且需要创建更多复杂的对象,则可以将复杂对象的创建分为一系列构建命令,例如:
vehicleBuilder.BuildFrame();
vehicleBuilder.BuildEngine();
vehicleBuilder.BuildWheels();
vehicleBuilder.BuildDoors();

然后,在这些方法中,根据您选择的实现,可以增加复杂性,但使方法调用和构造非常简单。

如果您没有遇到过,http://www.dofactory.com是一个不错的选择。

关于c# - 如何重构呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1588574/

10-10 02:50