2011-01-06 9 views
0

小さなプロジェクトはプログラマとして自分自身をより良くする機会を提供してくれました。私はコントロールフローの構造とドットネットライブラリを記述するリソースをたくさん見つけることができますが、私が得ていないのはコード全体をどのように構造化するかです。私は構造化されたプログラミングカリキュラムを一切通していないので、私は限られた理解のために悪い習慣を開発していないことを確認したい。私は以前かなりの手続き型プログラミングと少しのGUI作業を行ってきました。私は既にアルゴリズムと方法論を理解しています。このコードをどのように設計するかについての簡単な説明が必要です。c#dllの構造化に関する高度なガイダンスを求めよう

特に、長形式のテキスト文字列を解析して何らかの構造化データにするコードを含むdllを作成したいとします。すでにデータを取得するために必要な正規表現のレシピが用意されています。ほとんどのフィールドは単一の値になりますが、1対多の関係になる可能性があります。私はいくつのクラスを持ち、その役割は何ですか?実際の構文解析はどこで行われ、どのようなオブジェクトを返すべきですか?

私が説明しているパターンの種類がわかるまで、どのように進むべきかについては紛失しています。

+0

あなたはデータの構造を知っていますか?基本的なOOPの原則から始めてください。次に、ユースケースを決定し、オブジェクトを識別し、これらのオブジェクトに基づいてクラスを作成します。あなたがこれらの活動を完了すると、物事ははっきりと分かります。この点に関して@Sleeperが指すリンクが役立ちます。 –

答えて

0

オブジェクトを構造化する方法がわからない場合は、 OOP SOLID Principles を参照してください。これは基本的な基本です。

個人的には、構文解析/複数パラメータを必要とする任意の種類のインスタンス化、私はファクトリクラスでそれらを行うことをお勧めします。そのように依存性注入を行う方が簡単です。

誠に申し訳ありませんが、偉大なプログラマーに憧れたい場合は、何度も何度も書き直す準備をしてください。それはみんなが学ぶ方法です:)。

これまで何をしたら、静的メソッドに触れないでください。彼らは悪です。

+1

あなたは何をしていますか、静的メソッドに触れないでください。彼らは悪です。 ' –

+0

静的メソッドはテストするのが難しく、注入するのが難しいことは事実ですが、私はそれらを悪とは呼んでいません! – MattDavey

+0

静的メソッド/クラスに対するstatic = hard stoneコールド依存関係の参照。 –

1

最初に3層のアプリケーションを考えてみましょう。まず、データまたは持続層です。これは、データベース、XMLファイル、またはその他のデータ入出力です。 2番目はドメインまたはビジネス層で、実際のロジック&ビジネスアクティビティが適用されます。最後にプレゼンテーション層ですが、これはWindowsアプリケーション、ウェブサイトなどとなります。

まず、データ中心アプローチかドメイン中心アプローチかを決定します。データ中心のアプローチは、ドメイン階層のクラスがデータ構造と密接に一致するため、永続性は向上しますが、プレゼンテーション層は複雑になります。ドメイン中心のアプローチは、ドメイン層のクラスが問題の論理エンティティをより多く反映しているため、プレゼンテーションがより簡単になりますが、データ永続性は複雑になります。

可能な限り、各レイヤーを他のレイヤーとは切り離してください。それらの間の通信が必要な疎結合インターフェイスを使用します。例えば、ドメイン層は、(例えば、リポジトリパターンとDTOパターンの組み合わせを使用して)ドメインレイヤから必要な/期待するものを正確に定義する一連のインタフェース(または契約)を定義することができます。同様に、プレゼンテーションレイヤーは、ドメインレイヤーから必要なものを得るために必要なものを正確に定義する必要がありますが、MVVMパターンのVM部分がこれの良い例です。

ドメインレイヤーは、データレイヤーとプレゼンテーションレイヤー間のメディアとして機能し、各レイヤーがビジネスデータを表すユニークな方法をマッピングします。プレゼンテーション層はデータ層を意識する必要はなく、その逆もありません。

関連する問題