2011-01-17 17 views
1

新しいサイトを作成しようとしています。このサイトはユーザー中心のサイトです。さまざまな種類の情報とともにユーザーを表示します。ドメインモデルをどのように設定しますか?

これをモデル化する方法を決定しようとしており、いくつかのオプションについて考えています。

まず、いくつかの一般的なシナリオについて説明します。 1)現在のユーザーのユーザー名、市町村、写真を表示する場合があります 2)すべてのユーザー情報を表示したい場合があります 3)ときどきユーザー名のみを表示したい場合 4)時にはユーザー名と都市を表示したい場合もあります

各シナリオは、Webサイトの1つまたは複数のページに関連しています。 たとえば、forumpostsのページにはシナリオ1の情報が表示される場合があります。

これはさまざまな方法で解決できますが、私はあなたの意見をお聞きしたいと思います。

私は賛否両論でいくつかの解決策を取っています。

まず、複数のクラス。 すべての共通プロパティを持つユーザーから基本クラスを作成します。それからそこから広がります。 たとえば、


public class BaseUser 
{ 
    public string username; 
} 

public class User : BaseUser 
{ 
    public string city; 
} 

public class UserWithPicture : User 
{ 
    public string picture; 
} 

public class CompleteUser : UserWithPicture 
{ 
    public string SomeProperty; 
} 

長所:その時点で必要なものを正確に入力するだけで、パフォーマンスの観点から拡大縮小できます。 短所:将来何かを変更する必要がある場合はいつでも維持管理が難しい。多くの依存関係になります。

もう1つの解決策は、常にすべてを1つのクラスにまとめて使用することです。

 
public class User 
{ 
    public string username; 
    public string city; 
    public string picture; 
    public string SomeProperty; 
} 

長所:あなたが線を描画します:あなたは、常にユーザー 短所に関するすべての情報を持っていますか? OrderLinesとUserContactをここに配置できますか?すべてがこの1つのクラスに依存しているため、何かを変更する必要がある場合、維持するのが難しくなります。

別の解決策は、ほぼ各ページに一意のコンテキストを作成することです

 
public class ForumPost 
{ 
    public string data; 
    public string topic; 
    public string username; 
    public string usercity; 
    public string userpicture; 
}

public class SearchPost { public string searchdata; public string username; public string usercity; }

長所:他の何かに依存し、必要な情報のみ 短所記入する必要はありませ:、遅い開発をし、すべてのページに対して1つの新しいプロパティ(ユーザーの年齢など)が必要な場合は、多くの変更が必要になります。

提案?

答えて

0

すべての属性を持つ1つのクラス - 私はあなたの中間オプションに行きます。

継承による最初のアプローチは、維持/使用するための悪夢のように見えます。

最後のアプローチも同様に悪く見えます - 重複しています。

OrderLinesとUserContactsについては、これらを独自のクラスに分割しています。つまり、Userクラスのものから1つのクラスへの分割です。

〜クリス・

+0

ユーザーが100の異なるプロパティで、多くの異なるテキスト(多くのデータ)で満たされている場合はどうなりますか?ページの1%のみで使用しても、ネットワーク経由で送信する必要がありますか? – Patrik

+0

そのようなケースで問題がある場合は、一般的なプロパティクラスを導入することができます。たとえば、クラスUserProperty {string username、string propertyKey、string propertyValue}のようなものがあります。これらのユーザの多くはユーザごとに存在し、それぞれのユースケースに対して必要なプロパティをロードするだけです。 –

2

あなたはドメインモデルで行うことは非常に少しを持って言及したシナリオのすべて:

1)時々、私たちはにしたいが、 電流ののユーザー名、都市や画像を表示ユーザー2)時々我々はしたい場合もあります 表示すべてのユーザー情報3)ときどきを表示のみ ユーザー名4)ときどき あなたがしたいユーザ名と都市

を示しは、プレゼンテーション層にのみ懸念であることを示しています。データモデルを設計するときは、を表示することを忘れてと表示し、ビジネスエンティティを表現する最良の方法について考えてください。

+0

「あなたが見たいものを忘れて、あなたのビジネスエンティティを表現する最善の方法について考えてください。」 したがって、ユーザーとのフォーラムがあるようなモデルのように見えるようにするにはどうすればよいですか?ユーザが単独で、またはリストシナリオ(スレッド/投稿)で使用できる場所。 – Patrik

関連する問題