3

通常、C#でプログラミングするときは、ドメイン主導の原則の後に私のプロジェクトを設計します。私はObjective C for iPhoneでプログラミングを始めたばかりで、Objective Cのドメイン駆動型デザイン原則を使用するサンプルプロジェクトやコードがあれば疑問に思っていました.Business Objectsなどの使用例を探しています。ありがとう。目的Cドメイン駆動型設計

答えて

5

ドメイン駆動設計の原則が誤っている可能性があります。 DDDは一連のガイドラインであり、どのように考え、どのように問題にアプローチするかについては、ほとんどがテクノロジーにとらわれないものです。 Objective Cコードを書くと、技術の代わりにドメインによってデザインが動かされることはありません(個人的には、私の考えではより読みやすいコードのために引数に名前を付ける必要があります)。

あなたの質問は、DDD:ORM、DI、単体テストを通常サポートする(ただし、定義しない)技術に関するものです。そして、この部分はとても良いIMHOではありません(短くて比較的古い経験に基づく)。 ORMを使用する代わりに、通常、オブジェクトグラフの永続性を持つCore Dataを採用しています。これは、「リレーショナル」部分を扱わないため、理論的にはさらに良いと思われます。しかし、私は、Core Dataが他の環境では避けたいと思っていた私のオブジェクトモデルに一定の制限を課すことを覚えています。 DIについて話すことはできませんが、単体テストは痛み(2010年)でしたが、それはまだ2012年になっていると聞いてきました。

結論はあなたの質問に精緻化し、 Objective-Cセクションにあります。

+0

downvoterは説明してくれませんか? – Dmitry

+0

返事をありがとう。 – user1167865

2

私はC#のバックグラウンドからも来て、ObjCに入社して半年を経た後、私はObjective-CでDDDの原則を完全に守っていることは間違いありません。部分的には、言語の静的/動的ハイブリッド小規模な性質のためです。

たとえば、私が何を意味するのかわかっていれば、DIと単体テストを非常に簡単にするいくつかのメソッドをオーバーライドするだけで、オブジェクトに送信されたメッセージ(傍受メソッド呼び出しとも呼ばれます)を非常に簡単に呼び出すことができます。

さらに、grand central dispatchは、ドメイン間のコミュニケーションを容易にするために使用できるシステム間での非常に優れた分離メッセージを作成します。

最後に、基本フレームワークでのkey-value observingの規約により、ドメインオブジェクトをユーザーインターフェイス要素に簡単に接続し、変更をリアルタイムで反映させることができます。

サービスオブジェクトを直接操作するのではなく、その状態を変更するドメインオブジェクトの1つにコマンドを送信します。これらの状態は、あなたのコントローラが(KVOメカニズムを介して)変更を観察することによって容易に戻って反映されます。

したがって、ObjCではDDDの原理に従うことが完全に可能です。

例として、私は一度も見たことがありません。しかし、C#プロジェクトで使用するのと同じ構造(コピーはしませんが、同様にモデル化します)を使用するのは確かに難しいことではありません。私が言及した技術を勉強することはあなたにも役立ちます。

2

アンチDDD CoreDataがどのようにしているのか誰も言及していないことに私は驚いています。 CRUDスタイルのアプリでも、私は常にDDDスタイルをコーディングしようとします。最初に気づくのは、Cocoa全体、特にMac上でのCoreDataの広範な使用です。

XCodeとCocoaは、バインディングに沿ってCoreDataの使用を促進します。しかし、CoreDataは常にドメインモデルではなくデータベースにコード化しています。実際、データベース全体の移行を強制することなく、単一のドメインオブジェクト属性の名前を変更することはできません。

Cocoaを学んでいる場合、多くのアプリやサンプルコードがCoreDataに依存しているため、CoreDataを習得する必要があります。後で、フレームワークの知識が深まるにつれて、自分のプロジェクトで通常行っているドメインモデルが本当に必要な場合は、CoreDataを完全に削除することもできます。

+0

これも問題だと思います。 'ManagedMovie'をフェッチしてその属性をコピーするCore Data-backedリポジトリによって作成されたドメインモデルオブジェクト 'Movie'は、'管理された 'モデルを使用してドメインオブジェクトを作成することはあまりにも面倒です。コアデータはインフラストラクチャの一部であり、ドメイン自体に余裕がない。それをどうやって解決しますか? – ctietze

関連する問題