2016-05-11 12 views
1

私はAzure App Serviceモバイルアプリを初めて使用しています。私はTableControllerを使用して複雑なドメインオブジェクトをクライアントに公開するオプションを理解しようとしています。 TableControllerを使用する私の目標は、クライアント側のクエリとオフラインの同期を利用することです。TableController:永続データをDTOにフラット化

テーブルコントローラーは、単純なDTOでCRUD操作を実行するように設計されています。だから私は複雑なドメインモデルがどのようにTableControllerが設計されているDTOのよ​​うなものとして公開されるのかを理解しようとしています。

私はMappedEntityDomainManagerを説明しているthis postと読みました。この例は、DTOと永続オブジェクトの間のかなり単純なマッピングを示しています。しかし、マッピングをより複雑にしたい場合はどうすればよいですか?

たとえば、のは、私はこのような永続的なタイプとしましょう:

public class Order { 
    public Customer Customer { get; set; } 
    public IList<OrderItem> OrderItems { get; } 
} 

public class Customer { 
    public string Name { get; set; } 
    public string TelephoneNumber { get; set; } 
} 

public class OrderItem { ... } 

をそして、私はこのように宣言されたテーブルのコントローラがあります。

public class OrderController : TableController<OrderDto> 

OrderDtoは、このように見えるだろうか?

public class OrderDto { 
    public string CustomerName { get; } 
    public string Customer { get; } 
    public string OrderItems { get; } 
} 

マッピングは次のようになります。 Order.Customer.Nameプロパティは、OrderDto.CustomerNameにフラット化されています。完全なCustomerオブジェクトは、OrderDto.Customerにシリアル化されています。 Order.OrderItemsリストはOrderDto.OrderItemsにシリアライズされています。

MappedEntityDomainManagerでこのような複雑なマッピングを行うことはできますか?もしそうでなければ、それはどうやって行えますか?私はleveraging $expandについて知っていますが、推奨されるアプローチではなく、サポートされていないハッキングかもしれないと心配しています。

+0

あなたのアプローチは、クラウド上でnoSQLを使用してクライアント側(アプリケーション)でsqliteを使用しているように見えます。これは多かれ少なかれ、私が正しく理解すればアマゾンのWebサービスsnycのアプローチです。 – batmaci

答えて

1

これを行う最善の方法は、Automapperを使用することです。ブログ投稿は簡単な例でしたが、automapperを使用して非常に複雑なマッピングを行うことができます。

さらに複雑な例を示します。https://github.com/paulbatum/FieldEngineerLite/blob/master/FieldEngineerLite.Service/Controllers/JobController.csです。これはAzure Mobile Services用ですが、Azure Mobile Appsにも同じ概念が適用されます。名前空間を変更するだけです。

+0

チップをありがとうが、リンクされた例はAutomapperよりも '$ expand'を好む。これは[親オブジェクトに子オブジェクトを含める](http://stackoverflow.com/a/32999163)へのあなたの推奨に反しているようです。私の質問では、 'Order.OrderItems'リストプロパティの直列化を含む' OrderDto.OrderItems'文字列プロパティで、あなたのアプローチを念頭に置いていました。リンクされた例は不適切ですか、またはAutomapperよりも '$ expand'を実際に使用することができますか? – HappyNomad

+0

@HappyNomadこの例では、expand *および* automapperを使用しています。使用しているドメイン・マネージャーを見ると、マッピングされたエンティティー・ドメイン・マネージャーです。 –

+0

私は 'DefaultMappedEntityDomainManager'と' AutomapperConfiguration'に気付きました。これらのマッピングは私の例よりはるかに簡単です。とにかく、私の 'OrderItems'のような場合はAutomapperではなく' $ expand'をお勧めしていると思います。だから '$ expand'は"親オブジェクトに子オブジェクトを含める "ための有効な手段です、そうですか? – HappyNomad

関連する問題