3

私はmmorpgサーバーエミュレーター(趣味のプロジェクト)をコーディングしていて、データアクセス層の作成をやめました。事は私がORM(パフォーマンスの問題)を使用できないということです。リポジトリパターンについてたくさん読んだことがありますが、(player db)GetAllByLevel(...)、GetByName(...)などのメソッドが必要になるため、プロジェクトにうまく適合しないようです。アプリケーションをデータベースに依存しないようにしたい。(私は今のところSQLサーバーを使用していますが、後でmysqlのサポートを追加したいと思います)どのデータアクセスパターンが私のプロジェクトに適合しますか?

英語が下手でごめんなさい。

編集

もう1つ質問があります。リポジトリパターンがアグリゲートルートで動作することを読みました。私は3つのテーブルplayer、player_friendとplayer_chestを持っています。Playerは集約ルートであり、間違っていない場合は、GetFriends([player id]、...)、GetChest([player id]、...)のようなメソッドを持つことができるリポジトリ(PlayerRepository)を1つだけ作成する必要があります。等々。私は正しいですか?

4

2 に答える 2

5

リポジトリパターンについてたくさん読んだことがありますが、(player db)GetAllByLevel(...)、GetByName(...)などのメソッドが必要になるため、プロジェクトにうまく適合しないようです。

それどころか。間違ったリポジトリパターンの例(通常はリークのある抽象化)がたくさんあり、間違っていることがわかります。GetAllByLevelメソッドの役割を非常に明確に説明しているので、imhoは良いメソッドです。

リポジトリパターンについて書きました:http://blog.gauffin.org/2013/01/repository-pattern-done-right/。記事の冒頭にある抽象化リンクも読んでください。

事は私がORM(パフォーマンスの問題)を使用できないということです。

問題ない。リポジトリパターンは、データソースの種類に関係なく、データソースを抽象化するために使用されます。

バニラADO.NETを使用する場合は、次のブログ投稿を読むことができます:http: //blog.gauffin.org/2013/01/ado-net-the-right-way/

もう1つ質問があります。リポジトリパターンがアグリゲートルートで動作することを読みました。私は3つのテーブルplayer、player_friendとplayer_chestを持っています。Playerは集約ルートであり、間違っていない場合は、GetFriends([player id]、...)、GetChest([player id]、...)のようなメソッドを持つことができるリポジトリ(PlayerRepository)を1つだけ作成する必要があります。等々。私は正しいですか?

いいえ。フレンズもルーツだと思います。骨材の設計に関するこの記事を読む:http://dddcommunity.org/library/vernon_2011

于 2013-01-14T06:40:31.293 に答える
0

リポジトリは行く方法です。重要なのは、同じリポジトリインターフェースの複数の実装を持つことができるということです。1つはSQLサーバー用で、もう1つはoracleまたはpostgresql用です。考えられるすべてのデータベースをサポートする汎用実装が必ずしも1つあるとは限りません(これは非常に困難です)。

具体的な実装では、具体的なDBMSの特定の機能を使用して、パフォーマンス基準に適合させることができます。

于 2013-01-12T12:01:32.100 に答える