Fac*_*tio 7 dependency-injection asp.net-mvc-3 simple-injector entity-framework-4.3.1
我正在使用MVC3,Entity Framework v4.3 Code First和SimpleInjector.我有几个简单的类看起来像这样:
public class SomeThing
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有另一个看起来像这样的实体:
public class MainClass
{
public int Id { get; set; }
public string Name { get; set; }
public virtual AThing AThingy { get; set; }
public virtual BThing BThingy { get; set; }
public virtual CThing CThingy { get; set; }
public virtual DThing DThingy { get; set; }
public virtual EThing EThingy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
每个Thingy(当前)都有自己的Manager类,如下所示:
public class SomeThingManager
{
private readonly IMyRepository<SomeThing> MyRepository;
public SomeThingManager(IMyRepository<SomeThing> myRepository)
{
MyRepository = myRepository;
}
}
Run Code Online (Sandbox Code Playgroud)
我的MainController因此如下:
public class MainController
{
private readonly IMainManager MainManager;
private readonly IAThingManager AThingManager;
private readonly IBThingManager BThingManager;
private readonly ICThingManager CThingManager;
private readonly IDThingManager DThingManager;
private readonly IEThingManager EThingManager;
public MainController(IMainManager mainManager, IAThingManager aThingManager, IBThingManager bThingManager, ICThingManager cThingManager, IDThingManager dThingManager, IEThingManager eThingManager)
{
MainManager = mainManager;
AThingManager = aThingManager;
BThingManager = bThingManager;
CThingManager = cThingManager;
DThingManager = dThingManager;
EThingManager = eThingManager;
}
...various ActionMethods...
}
Run Code Online (Sandbox Code Playgroud)
实际上,此控制器中注入的依赖项数量是其两倍.它闻起来臭臭的.当你也知道有一个具有全部或大部分相同依赖关系的OtherController时,气味会更糟.我想重构它.
我已经足够了解DI知道属性注入和服务定位器不是好主意.
我无法拆分我的MainController,因为它是一个单一的屏幕,只需单击一个Save按钮就可以显示和编辑所有这些内容.换句话说,一个post post方法可以保存所有内容(尽管如果它有意义,我可以更改它,只要它仍然是一个Save按钮).这个屏幕是使用Knockoutjs构建的,如果有所不同,可以使用Ajax帖子进行保存.
我对环境语境的使用感到惋惜,但我并不认为这是正确的方法.我也很乐意使用注入Facade.我也想知道我是否应该在此时实现Command架构.(难道上面的所有这些都不会把气味移到其他地方吗?)
最后,也许独立于上述三种方法,我是否应该使用像GetAThings(),GetAThing(id),GetBThings(),GetBThing(id)等显式方法的LookupManager.(但是那个LookupManager需要注入几个存储库,或者一个新类型的存储库.)
抛开我的想法,我的问题是,重申:重构这些代码以减少注入依赖项的疯狂数量的好方法是什么?
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |