依存性注入との利便性の愛または結婚?

私の記事では、間違った例、私の意見では、依存性注入の原則の使用を検討し、他のチーム開発者(またはおそらく他の誰かが行うかもしれません)がより良いコードを書くための動機を見つけようとします文盲の方法で、リファクタリングを行います。

だから、問題の本質。 プロジェクトでは、OData WebApiを使用し、すべてのコントローラーはベースから継承し、ベースクラスのGetServiceメソッドを使用します。これは、ApiControllerScopeContextMediator静的クラスを介して依存関係をプルします。

public abstract class ODataControllerBase : ODataController { protected T GetService<T>() { return ApiControllerScopeContextMediator.GetService<T>(this); } } internal static class ApiControllerScopeContextMediator { internal static T GetService<T>(ApiController controller) { return (T) controller.Configuration.DependencyResolver.GetService(typeof (T)); } } 

Global.asaxでは、StructureMapを介してODataの依存関係プルを構成します。

  GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver(container); 

すべてのアクションで、コントローラーは、たとえば次のように、あらゆる場所でGetServiceメソッドを使用します。

 public class DisconnectedAppsController : ODataControllerBase { public IHttpActionResult Get() { var query = GetService<IQuery<IQueryable<DisconnectedAppDomain>, DisconnectedAppFilter>>(); } } 

しかし、なぜですか? 結局、コンストラクターインジェクションを使用することができます。

 public DisconnectedAppsController(IQuery<IQueryable<DisconnectedAppDomain>, DisconnectedAppFilter> query){ _query = query; } 

それで、「タヒチ、タヒチ」(コンストラクターインジェクション)または「彼らはここで私たちによく食べさせます」(GetService)?

私が見るこのコードの問題:


私が聞いた反対意見は何ですか:


数年前、Mark Simanの本Dependency Injectionを読みました。 私は座って考えますが、DIと私はどうですか?利便性の愛または結婚?

使用材料:

マーク・シーマン「依存性注入」
マーク・シーマンのブログ
Microsoft MVC6 githubオープンソースプロジェクト
SOLID wikiページ
YAGNI wikiページ
KISS wikiページ

Source: https://habr.com/ru/post/J271853/


All Articles