2012-10-19 5 views
10

私は、クライアントとサーバの2つのソリューションが含まれている.NETのC#アプリケーションで動作します。サーバ側では、以下の建築層を分離するために使用されている80+プロジェクト、整理コード

  • インフラストラクチャレイヤ
  • 統合レイヤ(外部システム)
  • ドメインレイヤ
  • リポジトリ層
  • マネージャのレイヤがあります
  • サービス層

n個の加算は、ほぼすべての層があるテストproject.Now、ソリューションのビルド時間は2〜3分、私たちはこの問題に取り組む必要があると感じ(:)私を含め)多くの開発者を取ります。

したがって、提案された解決策はprojects.In私のビューをマージすることにより、プロジェクトの数を減らすことだった、おそらく、ビルド時間を最小化するための良い解決策であり、我々は我々が望むものを達成できます。

プロダクションコード用のライブラリとテストコード用のライブラリと展開プロジェクト用のライブラリ(WCFホストなど)と論理的に分割された同じプロジェクト内のレイヤーの3つの領域にプロジェクトをマージすることが提案されています名前空間。

はしかし、私の懸念が

  1. は、保守のためにこれらの分離が良いでしですか?それぞれの名前空間appoxのクラスのhundreadを提供しています。
  2. 我々は、そのような私たちは、これらを入れているヘルパー、などの一般的な機能を持っている場合は?

ソリューションを積層する他の方法はありますか?

+2

私は、プロジェクトを少なくすると物事を速くすることはできません。コードの量は同じになります。私は、VSがプロジェクトの組み立てに多くの時間を費やすとは思わない。 –

+0

あなたのソリューションをいくつかのものに分割してみませんか? – Guillaume

答えて

2

ソリューションを論理層で分割する必要があります。

あなたはどこにヘルパーを配置しますか?最も低いレベルの1つで、そのための解決策を作りましょう。ファームの

ソフトウェア。あなたはあなたの動物、野菜を追跡する必要があります。動物に餌を与えるためのモジュールと消費者市場に動物と野菜を販売するモジュールが必要です。

この次のソリューションで

バックエンドに分割される可能性が

  • 売るモジュール:
  • 購入モジュール貴社の製品を販売するためのEveryting:種を購入し、あなたの動物のための食品、他の製品、...
  • Shedulerモジュール:種蒔き苗のイベント、収穫、...
  • 予測Moduル:...

これらのバックエンドモジュールのそれぞれを、天候によって収穫量の、および市場価格、...

  • を予測し、それが自分のデータアクセス層、DTO、WCFサービス、だことができます。 ..

    このソリューションには、ビジネスロジック、データアクセスなどが含まれます。また、これらのバックエンドソリューションに複数のフロントエンドソリューションを接続することもできます。

    フロントエンド

    • ASP.NET MVCアプリケーション:消費者へ
    • WPFアプリケーションを販売するウェブショップ:買うもの:承認が
    • その他のWPFアプリケーションを販売しています。
    • モバイルアプリケーション:携帯端末などにイベントを取得する。
    • (別のオプションは、1フロントエンドソリューションの中に2つの以上のバックエンドソリューションを接続することである)
    • ...

    これは、プロジェクトの大きな変化であり、これは影響を与えることになります。あなたがそれを変更することができない場合は、これが真実だと確かめてください。

    複数のソリューションは全体的なビルド時間を増加させます。すべての開発者がローカルマシン上のすべてのソリューションをビルドすることなく常に最新のバイナリで作業できるように夜間ビルドが重要です。

    あなたはまだ別のソリューションであなたのレイヤーを使用することができます注:

    • インフラストラクチャレイヤ
    • 統合レイヤ(外部システム)
    • ドメイン・レイヤー
    • リポジトリレイヤ
    • マネージャー層
    • サービス層

    この作業をまとめてバイナリに混乱させることはありません。ドライブI.Eをマップすることができます。 X:フォルダバイナリがある場所。各ソリューションのフォルダがあります。各ソリューションはポストビルドイベントでアセンブリをコピーします。 (これをスクリプト化して、すべてのマシンで動作するように)

    ネットワークインフラストラクチャがあれば、サーバにコピーすることもできます。たとえば、TFSですべてのソリューションを構築すると、すべての開発者がアクセスできる場所にそのソリューションをコピーできます。

    TFSでビルドする場合は、ビルド順が正しいことを確認してください。最初は最下位層、最上位層です。

    しかし、ソリューションを分割するにつれて、ソリューションではすべてのソリューションで必要とは思わないでしょう。

    私は最近、Onion Architectureについての記事を読んでいます。多分あなたもそれを見ることができます。 (これはASP.NET MVC専用です)。

    CQRSもご覧になれます。

  • 2

    私は間違いなくプロジェクトをマージしません...開発者は、ショートカット(彼らが意味するかどうかにかかわらず)を取るべきではないので、各層のスパゲッティコードですぐに終わるでしょう。

    は、私は別の解決策に出て層を分離する傾向も...、代わりに層にわたってプロジェクト参照のバイナリの参照を使用すると思います。これは分岐すると混乱を招くことがありますが、注意してください。

    プロジェクトを共通の場所にビルドすることでビルド時間が短縮されていることがわかりました。これは、VS再構築が必要ないときにVSの再構築を妨げることは明らかですが、これが真であるかどうかわかりません。ここ

    いくつかのアイデア:最後にhttp://blogs.microsoft.co.il/blogs/arik/archive/2011/05/17/speed-up-visual-studio-builds.aspx

    ....フルビルドのか、単にユニットテストのプロジェクトの3分のでしょうか?どちらが最大の問題であるかに注目してください。単体テストに長い時間がかかる場合は、依存関係に問題があります。完全な解決に長時間を要する場合は、ビルドサーバーを入手し、ユニットテストの開発時間を短縮することに集中してください。

    希望するもの

    3

    アプリケーションに6つのレイヤーしかないのに、80+のプロジェクトがなぜ必要なのですか?

    多くの機能領域をカバーしていると答えてもいいかもしれませんが、最初にこれらの機能領域すべてを1つの解決策にする必要がありますか?

    アーキテクチャの部門とプロジェクトの機能部門をソリューションに反映させることをおすすめします。さまざまなソリューションが同じプロジェクトを再利用できます。このようにして、再利用可能な各アーキテクチャー層ごとに1つのプロジェクトを作成し、機能領域と同じくらい多くのドメインプロジェクトを作成します。

    +0

    ええ、良い点があります。私たちはデータ契約を持っており、多くの層のために別々のプロジェクトで運用契約を結んでいます。しかし、私たちはソリューション内に多くの外部システムプロジェクトも持っていますが、今のところソリューションから削除する必要があると考えています(適用可能であれば – marvelTracker

    1

    私はこれまでのような問題に対処してきましたが、プロジェクトとそのテストプロジェクト(およびおそらくプロジェクトの依存関係)のうちの1つだけを含む一連のソリューションファイルを作成することです。次に、NCrunchのようなツールを手に入れ、おそらくTDDを使用して、これらのソリューションでほとんどのコーディングを行います。これにより、高速のフィードバックループが得られ、階層化されたデカップリング手法の精神の中で明らかになります。私が過去にこれをやったとき、私は実際にはアプリケーション全体を1日数回、最大で実行していました。そして、とにかく素晴らしいred-green-refactorに頼っています。

    必要に応じて、これらの小さなソリューションファイルをソース管理する必要はありません。開発者は独自のファイルを作成することができ、境界線を捨てることができます。

    もちろん、これは万能薬ではなく、アプリケーションを実行したいときに長いコンパイル時間の問題に対処しませんが、フィードバック時間を短縮しながら設計/開発を促進することは間違いありません非常にリスクが低く、セットアップが迅速であるという利点があります。

    +0

    )。あなたは私が以前のプロジェクトのうち同じことをしたことを思い出しました。それぞれの開発者はそれぞれ独自のソリューションファイルを持っており、彼らはローカルのために保管しています。しかし、他のプロジェクトとの競合により、ビルドに失敗しました。 – marvelTracker

    関連する問題