我上课时要管理 3 不同的上传操作:
internal class UploadManager
{
internal UploadManager(UploadOperation uploadOperation)
{
switch (uploadOperation.OperationType)
{
//run different set of async tasks based on OperationType,
//using nested class Uploader
}
}
private class Uploader
{
//do all upload work
}
}
他们使用的Wcf操作合同中的3个操作与要发送的数据类型之间的差异。 这种情况下最好的架构是什么?制作3个不同的Uploader课程?还是1班有3种方法?或者1个类,一个方法有3个重载?
总的来说我应该使用嵌套类吗? 感谢。
评论后添加: 问:运营类型会在一段时间内发展吗? 答:没有
问:你会加入更多吗? 答:是(1-5更多)问:他们(将)是否需要更多参数,并且不会在所有类型中共享这些参数? 答:没有
答案 0 :(得分:2)
你应该避免在UploadManager中实例化类,而是提供一个UploaderFactory类,它选择要使用的特定上传器。要实现这一点,Uploader和uploaderFactory需要实现接口(IUploader和IUploaderFactory)。工厂有一个方法 - GetUploader(...),它返回一个正确类型的Uploader实例。
不需要私人课程 - 将其设为内部课程。最重要的是隔离功能使一切都可以测试。
这样的事情:
interface IUploader
{
void DoStuff();
}
interface IUploaderFactory
{
IUploader GetUploader(UploadOperation uploadOperation);
}
internal class UploadManager
{
internal UploadManager(IUploaderFactory uploaderFactory, UploadOperation uploadOperation)
{
var uploader = uploaderFactory.GetUploader(uploadOperation);
//run different set of async tasks based on OperationType,
//using nested class Uploader
uploader.DoStuff();
}
}
internal class Uploader1 : IUploader
{
public void DoStuff()
{
...
}
}
internal class Uploader2 : IUploader
{
public void DoStuff()
{
...
}
}
internal class Uploader3 : IUploader
{
public void DoStuff()
{
...
}
}
这种方法的主要好处是:
这是一种模糊的答案,但我认为它解决了arcitecture方法。
希望它有所帮助 - 祝你好运!
答案 1 :(得分:1)
使用KISS原则,我会用3种方法进行1节课。