.NET 開発基盤部会 Blog

.NET 開発基盤部会 Blog >> 記事詳細

2018/06/11

.NET Application Architecture @ Enterprise 2018

Tweet ThisSend to Facebook | by:nishino
 ちょっと急な入用があったので書いてみました。

 内容は、タイトルの通り、2018年 現在、弊部会が考える、エンタープライズ版の.NET アプリケーション・アーキテクチャの選択基準のメモ的なモノです。

<目次>

  • 言語
    • C#
    • VB
  • P層
    • Web
    • Desktop
    • Frontend
  • D層
    • Entity Framework
    • Dapper
    • ADO.NET
    • その他
  • 参考

<言語>

 開発言語としては、「C#」と「VB」があり、エンタープライズのEUCでは「VB」にまだまだ需要がありますが、開発者にとって、「VB」の言語としての人気は下がってきているようです。

 また、コレ以外に、下記のFrontend開発で「JavaScript」、「TypeScript」、「ECMAScript」等を使用するケースも増えてきているようで、これらの言語の人気は上昇傾向にあります。

<P層>

<Web>

 「One ASP.NET」(でググって出てくる図中)にある「MVC」が世間一般では主流ですが、エンプラでは「Web Forms」もまだまだあります。ただし、将来、.NET Coreがメインストリームになった場合、現時点では「Web Forms」の移行パスがありません。

 また、コレ以外に、「Web API」+クロスプラットフォームなFrontendと言う選択肢もあるかと思います。コチラは「.NET Core」にも移行可能ですが、現時点で出力できる生産性は結構低いと思いますので、「百キロSTEP - メガSTEP」級のエンプラ・システムの開発案件に適用するのは少々怖いですね。下位スタックのライフサイクルにも問題があります。

<Desktop>

 エンプラでは、まだまだ、「Windows Forms」が主流です。UIに拘りたいと言うなら「WPF」という選択肢もあるかと思いますが、XAMLという技術が完成度は非常に高いのですが「使いこなすには難易度が高い。」と言うのが「玉に瑕」です。

 こちらは、.NET Coreがメインストリームになった場合も、.NET Core 3.0以降、「Windowsデスクトップパック」なるものが提供され、「Windows Forms」や「WPF」も.NET Core対応される旨がアナウンスされ、移行パスが用意されました。それだけ需要があるということでしょうか。

<Frontend>

 「SPA」から「モバイル」まで、いろいろなFrontendがありますが、「UWP」と「Xamarin」は、今の所、少々「下火」なんじゃないか?と思っています(双方とも、前述のXAMLベースの技術です)。今後の挽回に期待という所でしょうか?

 それ以外に、Node.js系の開発環境を持つ様々なフレームワーク(Angular / React / Vue / etc. , Cordova / ReactNative / etc.)が流行っていますが、前述のとおり、エンプラにとっては早過ぎるライフサイクルに課題があると思います。

<D層>

 以下の選択肢から選択可能ですが、エンプラは「Entity Framework」や「Dapper」は正直、ハマらないケースがあるかと思います。

 その場合、生の「ADO.NET」か、主流ではないですが「その他のドメインに適合したデータアクセス・フレームワーク」を使用するのがイイかと思います(ただし、ライフサイクルに注意する必要がある)。

  • Entity Framework
  • Dapper
  • ADO.NET
  • その他、ドメインに適合した、
    データアクセス・フレームワーク
    • Open棟梁
    • MyBatis
    • S2Container.NET

<Open棟梁>

 なお、下図のように、「Open棟梁」を使用して、Web Forms / MVCによる2層Webアーキテクチャ、Windows Forms / WPFによる3層C/Sアーキテクチャで開発をしておけば、将来的に、ASP.NET Core MVCや、WebAPI + 各種 Desktop or Frontendなど技術を用いたマイグレーション・パスを残しつつ、大規模開発が可能になるかと考えます。特に、3層C/Sのオブジェクトのバイナリ転送が.NET Core でも可能か?など興味深いですね。

<参考>


12:00 | 投票する | 投票数(0) | コメント(0) | ご報告