关于如何将其重构为体面的模式,我遇到了一个小问题。
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();
}
}
}
我有两种类型的工作程序文档,但是我似乎无法轻松地将上述两种方法(
AttemptContractRetrieval
和AttemptAssignmentRetrieval
)重构为一个体面的形式。任何帮助将非常感激。
问候,
吉姆
最佳答案
就个人而言,我会考虑使用工厂方法的工厂模式或构建器模式。
在企业库解决方案中可以很好地使用工厂模式,例如:
Database.CreateDatabase();
我会说这将是最直接的整合方法。
如果选择了Builder模式,并且需要创建更多复杂的对象,则可以将复杂对象的创建分为一系列构建命令,例如:
vehicleBuilder.BuildFrame();
vehicleBuilder.BuildEngine();
vehicleBuilder.BuildWheels();
vehicleBuilder.BuildDoors();
然后,在这些方法中,根据您选择的实现,可以增加复杂性,但使方法调用和构造非常简单。
如果您没有遇到过,http://www.dofactory.com是一个不错的选择。
关于c# - 如何重构呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1588574/