0

作成、リスト、更新、削除などの操作を行うメッセージ サービスがあります。

このサービスには ListByMember(int memberId) メソッドがあります。

2 つのビューを作成する必要があります。1 つはメッセージのタイトルのみをリストするビュー、もう 1 つはメッセージのタイトルと説明をリストするビュー、もう 1 つはタイトルと既に受信したメッセージの回答の合計をリストするビューです。

サービス レイヤーに 1 つのメソッドを作成し、DTO を介してすべての情報をメッセージ エンティティからビューに転送し、ビューに必要なフィールドのみを表示するかどうか、またはサービス レイヤーに 3 つのメソッドを作成するかどうかはわかりません独自の DTO と特定のビューに依存しないようにします。

単一のサービス メソッドを作成するのが怖いので、将来メッセージの特別なリストが必要になった場合、問題に直面するでしょう。

どんなアドバイスでもいいです。

ありがとう。

4

2 に答える 2

1

ビュー/コントローラー アクションは、ビジネス ロジックを配置するのに最適な場所ではありません。多少のコード​​の追加を意味する場合でも、サービスで 3 つのメソッドを用意するようにしてください。あなたは、DTO を使用してそれを本当に良いものにすることに決めました。実行できるアプローチの 1 つは、リポジトリから IQueryable として DTO を取得し、パブリック メソッドを介して公開するプライベート メソッドを作成することです。

// DTOs
public class MessageSummaryADto
{
    public int MessageId { get; set; }
    public string Title { get; set; }
}

public class MessageSummaryBDto : MessageSummaryADto
{
    public string Description { get; set; }
}

// public methods
public int GetMessageCount()
{
    return GetMessageSummary().Count();
}

public IQueryable<MessageSummaryADto> GetMessageSummaryADto()
{
    return GetMessageSummary().Select(m => new MessageSummaryADto { MessageId = m.MessageId, Title = m.Title });
}

public IQueryable<MessageSummaryBDto> GetMessageSummaryBDto()
{
    return GetMessageSummary();
}

// the private method
private IQueryable<MessageSummaryBDto> GetMessageSummary()
{
    return yourMessageRepository.Select(m =>
        new MessageSummaryBDto {
            MessageId = m.MessageId,
            Title = m.Title,
            Description = m.Description
        }
    );
}

IQueryable のファンでない場合は、dtos を IList として公開できます。

幸運を

于 2013-03-09T02:55:10.993 に答える
0

私の 2 番目の回答は、ビジネス サービスと UI サービスという 2 つのレベルのサービスを保証します。リストやグリッドなどのプロジェクションやフィルターなど、非常に具体的な UI 処理がある場合は、このアプローチが必要です。ビジネス サービスは、より一般的なメソッドを公開します。これは、UI に対してニュートラルです。

したがって、それがどのようにマッピングされるかは次のとおりです。

ドメイン オブジェクト (出力: ビジネス オブジェクト) -> ビジネス サービス (一般的な DTO を出力) -> UI サービス ( UI 固有の DTO ) -> コントローラー アクション -> ビュー

データのスライスとダイシングの UI タスクを UI 固有のサービスにオフロードすると、コントローラー アクションが非常に薄くなります (そうあるべきです)。一般的には、コントローラー アクションのコード行数を 10 ~ 15 に制限できるとよいでしょう。

UI サービスをコード ビジネス サービスから分離すると、複数の UI を持つことが容易になります。たとえば、ビジネス サービスが UI ニュートラルである場合、それを使用して ASP.Mvc および WPF アプリにカーターすることができます。

上記のアプローチには、維持する追加のレイヤーの代償が伴いますが、明確な分離が必要な場合は、検討する価値があります

乾杯

于 2013-03-11T00:17:46.223 に答える