どのように厳密にあなたのプロジェクトで層間の懸念のn層アーキテクチャと分離に従っていますか?

StackOverflow https://stackoverflow.com/questions/533311

質問

私は、開発者のほとんどは、多層アーキテクチャのアイデアを持っていると仮定します。私たちは、DAL(データアクセス層)を持って、私たちはどこかに私たちは私たちのUIを持っている道路の終わり近くBLL(ビジネスロジック層)とがあります。あなたが何らかの形でこれらの原則を次のプロジェクトを持っている場合は、キープ(あるいは少なくとも試してください)ん保つために/彼らは概念的に属しているものを入れますか?私はあなたが他の多くの人々と一緒に働く大企業用途において特に興味があります。明らかに、あなたは、あなたがあなたのプライベートなおもちゃのプロジェクトでやりたいアーキテクチャのいずれかの種類を考案し、それに固執することができます。それは多くの人々がソフトウェアや全体的な混乱に貢献した大規模なプロジェクトとそう簡単ではありません。

たとえば、私は、UIコンポーネントのようなものがいくつかはまた、UIやBLの両方が私の意見では、テーブルのフィールドのような低レベル要素での作業、BLが供給されない余分なデータを「行方不明」フェッチするためにデータベースに直接行く見に起こりました彼らは低いレベル、すなわちDALに、これらの操作を委任する必要があります。上級開発者の男で物事を議論した後、私は彼がすべてでこれに伴う問題を見ていない見たとき、それは特に悲しかった。

私たちは、もちろん私と誰でも私の視点を共有するだけで完璧主義つつあると仮定することができますが、それはすべての「パラレル」を追跡するために私の仕事の一部に私に長時間を要したことに、私は明らかに非常にdisadvantegous結果を見てデータがデータベースにから走行され、今は実施新しい機能によって影響を受ける可能性が誰とどのように識別するためにルート。誰かがすぐにものをハックし、できるだけ早くタスクを閉鎖することを決めたとき、私はそれを参照してください方法は、これらのいくつかの貯蓄をオーバーウエイトの更なる開発/保守コストを増加されます。

あなたは「純粋な」プロジェクトですか、彼らは長い時間前に層の間に明確なラインを維持する考えを放棄しましたか?あなたはまだ右のそれを維持した場合、どのようにあなただけの「カスタム」ソリューションやハッキングハッキングのすべての時間を構築するこれらの事を理解していないか、それを気にしない同僚に対処するのですか?あるいは、ある時点で、あなたは風車と戦って停止し、あなたの罰としてそれを受け入れました?。 EDIT:多くの人が問題に興味を持って持っていないことにやや驚い。看板が最も気にしないということですか?

役に立ちましたか?

解決

私たちのアプリケーションが取得するより複雑な、懸念のより重要な分離がなります。

100 klocsで、アプリケーションはとしてどこか他のフォームクラスのように、多くのビジネスコード、一つの大きなブロブだったとビジネスクラスからフォームメソッドを呼び出します。多くの嘆きと歯ぎしりで、我々は表示ロジックからビジネスロジックを分離しました。その進捗状況をユーザに通知するために必要な任意のクラスは、UIによって撃沈されたイベントを発生させました。そして、しばらくの間、すべては世界で右だった。

200 klocsの周囲には、我々はデータ層を追加しました。我々のアプリケーションのアーキテクチャは、我々のデータのほとんどは、すぐにそれがでてきて、すぐに捨てたように処理されるようなものでした。ほとんどの構成情報は、私たちが共生関係を共有していると、サードパーティ製のアプリケーションで保存しました。しかし、設定が奇数のコーナーのすべての種類に蓄積し始めました。我々は、すべての複雑なビジネスロジックに織り込ま3つの構成管理システム、で巻き取ります。豊富な書き換えにより、我々は独自の層と他の層へのストリーミングデータの取り扱いに設定情報を分離することができました。

250 KLOCラインの近くに、我々は、サードパーティベンダーとの関係を終了し、我々のアプリケーションは、スタンドアロンで作ることにしました。私たちは、大規模な書き換えを開始し、最初の時間のために、私たちのアプリケーションに実際のデータベースを追加しました。我々はストリーミング情報、データストレージ、およびビジネス・ロジックの間に明確なラインを持っていたので、これはかなりシームレスに統合しました。

さて、500 klocsに近づいて、私たちは、グリッドベースのアーキテクチャにアプリケーションを移動しています。唯一のUIは、別のコンピュータ上でビジネスロジックから分離されるわけではありません、アプリケーションが送り出す引用符と注文の実際の計算は、ロードバランスと効率を最大化するために広がるだろう。これは、n層アーキテクチャなしでは不可能であろう。

成長の各段階において、我々は、いずれかの明確な分離によって助けられたか、通信、データ、ビジネス、およびUIの私たち自身の混乱によって妨げ。おそらく、このアプリケーションの作成におけるその分離よりも重要な懸念されていません。

他のヒント

これは素晴らしい質問です!何かが、すべてのASP.Net開発者が考える必要があります。おそらく、私はこれらの基本的な常識的なアイデアを奨励したい、答えの多くを取得します。

- 「成功」アーキテクチャだけでなく、「純度」の一環として、配信のシンプルさと速さを考えてみましょう。建築理念に保持し、かつ実用的であることの間でバランスをとるようにしてください。

- 一般的に、あなたが言及として層に出て、コードを分割しても意味がいるようです。それは簡単です場合には、ページ固有のロジックのために、それはページ内に残ることができたのに、私がお勧めします/速く - なぜただ一つの場所で使用されているコードのための汎用ビジネス・オブジェクトを作成します。それは「時期尚早の最適化は諸悪の根源である。」と言われていたよう。

- コーディング時間を短縮し、可読性と保守性を向上させるために最小限に層と複雑さをキープ。

アーキテクチャのサイトのためのアーキテクチャをしたい、このサイト上の多くの純粋主義者があります - それは聞かせて、それ自身のために、ビジネス上の問題にはないとしてだけで芸術形式をソリューションを提供するためのツールとしてのアーキテクチャを使用しますむしろ、それはあなたを使用するよりも便利なツールます。

別々の懸念をしてください。それは非常に非常に重要です。データ層とビズとビズでUIを混在させないでください。抽象化と協力。抽象化での作業も、(それらをモック)テスト(単体テスト)が容易になります。私は厳密にはそれが属するそれぞれの層を保ちます。どのプロジェクトで最も高いコストが、それはメンテナンスだであることを忘れないでください。あなたが懸念を混ぜた場合、メンテナンスが悪夢つもりになっている。

私たちは、Winformsのアプリ、およびASP.NETアプリケーションを持っています。これらは両方とも同じビジネスオブジェクトのプロジェクト(約140クラス)を使用します。

Winformsのプロジェクトは約350フォームとユーザーコントロールクラスで構成されており、非常に少数(<10)、これらのデータベースから自分自身についてのメタデータを必要とする。

ASP.NETプロジェクトは約100 .aspxのページを持っています。

私たちは、ADO.NET、スレッドとの取引と自分自身を懸念5クラス、からなるデータアクセス層を持っています。彼らは、SQL Serverの呼び出しにビジネスオブジェクトからの要求を変換します。

(サイズフォームに関するメタデータを必要とするいくつかのクラスを除く)UI層はまったくデータベースアクセスを行いません。でも、いくつかの例外は、何か他のもののようなDALを通過します。

ビジネス層は、データアクセス層の内部の仕組みについて何も知らないし、それがデータを必要とするとき、しかDALクラスのパブリックメソッドを呼び出します。

それはこの種のものになると私はすべての原理主義ではないんだけど、私たちはこの1にコーナーをカットするために必要なことがありません。

要するにので、100%純粋な。単に、常に右のそれを行うには、より良い働いています。

私たちは今、ここから離れて移動するために正当な理由の地獄を持っていなければならないと思います。

コードサルと純粋主義者は、多くの生活の中で他の過激派のようなものです。

私たちは、極端な右翼と極端な左翼を持っています。非常に少数の人々は、1つのまたは他のであり、彼らは、彼らが座って良い妥協点を見つけます。それは過激派のためではなかった場合、我々は境界がどこにあるか分からないでしょう。

私の知る限りコードが行く道など。私はそれをやっての純粋主義者の道に耳を傾けます。私は、コードのサルはその方法については行く参照してください。私はそれと私は実際にそれを行うために取得するつもりだお金の量を生産するために必要な時間と一緒に私に柔軟性と管理の適切な量を与える妥協点を選択することが私の経験を使用します。

コードより大きく、寿命より長く、より多くの異なる人々が層に、より重要な彼女の分離がある(両方同時または寿命の間)のコードに取り組んでいます。初めに、もう少し不要な作業のようですが、長い目で見れば、それは自分自身のために数回にわたり支払うます。

分離を強制するためとして:あなたのリードプログラマーや技術的な建築家が良いソフトスキルだけでなく、純粋な技術的なスキルを必要とする理由です。きれいな全体像を維持するために、あなたの開発者はあなたが技術的に分離を実施しようとすることができます(下記参照)が、最後に、あなたが説得(または強制)する必要があります。

しかし、これは分離を実施するための技術的手段は一切使用していないということではありません。実際に、私は作ることがやや困難な「クロスボーダーが呼び出す」ことを確保することは、人々は、彼らが本当にきれいインターフェースにつながる、クロスボーダー・インタフェースに必要なものを考えるより多くの時間を費やすようになりますことを見出しました。難易度は(あなたが三重に7ページのフォームに必要事項を記入しなければならない)技術(あなたはCOMやCORBAを使用する必要があるため)、または何か他のものであるかどうかは関係ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top