1

私は次のデータベーステーブルを使用していますが、私は oop が初めてなので、ここで質問したいと思いました。

assignment
----------
id
person_id
assigned_address_id
position_id

person
----------
person_id
current_address_id
name
ssn
drivers_license

address
---------
id
address_number
address_street
address_city
address_state 
address_zip

position
---------
id
description
rate

次のクラスを作成しました

Person Class
int? id
Address currentAddress
string Name
string ssn
string drivers_license

PersonAssignment Class
id
person_id
Address assignedAddress
Position assignedPosition 

Address Class
string address_number
string address_street
string address_city
string address_state 
int address_zip 

Position Class
int? id
string description
double payment_rate 

また、Dal.Repository にアクセスし、各オブジェクトで crud メソッドを実行するオブジェクトごとに個別のサービス クラスを作成しました。すなわち

PersonService Class
Update(Person p)
Insert(Person p)
GetListOfPeople()
GetPerson()

PersonAssignmentService Class
Update(PersonAssignment p)
Insert(PersonAssignment p)
GetListOfPeopleAssignments()
GetAssignment()

各オブジェクトのリポジトリもあります

すなわち

PersonRepository Class
Update(PersonAssignment p)
Insert(PersonAssignment p)
GetListOfPeopleAssignments()
GetAssignment()

個人の割り当てと個人の詳細の両方を含む私の Web ページで、PersonService と PersonAssignmentService を呼び出していることに気づきました。

これは大変な作業のようです。私は何か間違ったことをしていますか?このようなものを設計するためのより簡単な方法があるかもしれませんが、私はそれを理解していません。

助けてくれてありがとう

ありがとう

4

5 に答える 5

1

必要なことは、データ アクセス レイヤーを設計して実装することです。

http://rlacovara.blogspot.com/2009/02/high-performance-data-access-layer.html

この記事は、データ アクセス レイヤーの作成方法について説明した記事の中で、これまでに見た中で最高のものです。著者は、データをデータ アクセス レイヤーからビジネス レイヤー (またはネイティブ アプリケーション クラスに変換できる別のレイヤー) に移動するには、DTO (Data Transportation Objects) を作成する必要があると説明しています。彼は、データ転送オブジェクトを支援する基本クラスとコード、DTO を設定するコード、および DTO をデータベースに保存するコードを提供します。

このシリーズには 3 つの記事があり、全セットを読むことをお勧めします。

于 2009-04-21T01:21:56.360 に答える
0

データベースの設計とクラスは、批判するのが難しい場合があり、その多くはビジネス ルールとトランザクションの種類に大きく依存します。

手始めに、個人の住所用に別のテーブルを用意したり、Address を定義する特定のクラスを作成したりしません。

どのプログラミング言語を使用しているかはわかりませんが、ORM (オブジェクト リレーショナル マッピング) を調べてみる価値はあるでしょう。

于 2009-04-21T01:13:54.807 に答える
0

あなたの Web ページが何をしているのかは 100% わかりませんが、PersonAssignment Id があり、そこから PersonAssignment オブジェクトを取得し、次に Person オブジェクト自体を取得していると仮定すると、次のようにすると簡単になります。

PersonAssignment クラスで、person_id だけでなく、Person オブジェクトを参照するプロパティを追加します。あなたの例から:

PersonAssignment Class
id
person_id
Person person
Address assignedAddress
Position assignedPosition

GetPersonAssignment メソッド (パラメーターを受け取ると仮定します) で、Person オブジェクトを設定する作業を行います。これも考慮に入れるには、Insert メソッドと Update メソッドに追加する必要があります。

于 2009-04-21T01:25:00.037 に答える
0

ルールによっては、各人が持つことができる住所は 1 つだけであるように見えるため、誰かが移動すると、住所テーブルに person_id がないため、最後の住所が失われます。

しかし、それはつまらないことです。

前述のように、DAO を使用することは優れたアイデアです。ロジックを分離してください。

私はDAOを書くことから始め、それがやるべきことをすべて実行していることを確認してから、次のレイヤーに取り組みます。そうすれば、データベースに必要な変更を加えることができます。

C# を初めて使用する場合は、.NET 3.5 が提供するさまざまなツールを確認することをお勧めします。これは、データベースへのアクセスを簡素化し、実際のデータベースを抽象化するために多くの変更が加えられているためです。

これの利点の 1 つは、データ ソースの一部が XML ファイルから取得されている可能性があり、データ ソースの実際のソースに関係なく、DAO が正常に機能することです。

于 2009-04-21T01:40:03.573 に答える
0

サービス クラス、リポジトリ、および DAL を備えた他の誰かによって設計されたフレームワーク内で作業しているように聞こえますが、これらすべてのものを手に入れたので、大量のコードを見て「isnもっと簡単な方法はありませんか」。簡単な答えはイエスです。もっと簡単な方法が常にあります。開発者の数だけ、データ アクセスを行うさまざまな方法があります。使用しているモデルはかなり複雑で、ドメイン駆動設計の原則に従っているように思えます。DDD は優れた方法論であり、優れた関心事の分離と高いテスト容易性を提供します。しかし、多くの配管コードも必要であり、ほとんどの .Net プログラマーにはよく理解されていないため、助けを求めるのは難しい場合があります。エンタープライズ アプリケーションを構築する最良の方法だと思いますが、

小規模なプロジェクトを実行している場合は、BLL を完全にバイパスすることを検討することをお勧めします。サービス クラスもリポジトリもありません。エンティティ クラスを含む Common Lib/プロジェクトを用意し、データ アクセス メソッドを含む DLL を直接作成して直接作成する必要があります。エンティティを保存します。

さらに簡単な方法は、エンティティ クラスを使用せずに、エンティティ データを含む ADO.Net DataTable を DLL が返すようにすることです。このアプローチでは、エンティティ クラスの厳密な型指定が失われますが、実装ははるかに簡単です。

別のアプローチは、Entity Framework を使用することです。EF はこれらすべてを実行し、厳密に型指定されたエンティティ クラスを生成します。EF に慣れるまで少し時間がかかりますが、EF の操作方法を理解すれば、永続化コードの作成にかかる時間を大幅に短縮できます。EF に関する優れたチュートリアルについては、Rob Bagby のブログを参照してください。

于 2009-04-21T14:40:30.950 に答える