3

この質問は、MVVM のビジネス ロジックはどこにありますか? に似ています。

ただし、そのコメントチェーンを作成したくありませんでした

たとえば、請求書の表があり、このデータを取得して、2 つの完全に別個のレポートと 3 つの画面で使用できるように配分を実行したいとします。

現在の Web アプリケーションでは、これを Data Service Layer に配置し、すべてのレポートと画面でこれを呼び出します。

MVVMでは、モデルを肥大化させず、ロジックをビューモデルに入れる必要があると提案しているようです。しかし、この場合、コードを 5 回複製していますか?

私の別の質問に対する彼の回答で、Reed は次のように述べています。

リードまたは誰かが私のアプローチがどうあるべきかを明確にすることができますか? MVVM を他のアーキテクチャと組み合わせることはできますか?

Simple MVVM Toolkit で Silverlight 5 を使用しています

ポール

4

2 に答える 2

0

ViewModelはビジネスロジック用ではありません。これは、ユーザーインターフェイスロジック用です。その名前が与えられているように、それはビューを表しています。同様のデータを示す5つの異なるレポートがある場合は、このデータに名前を付け、5つのViewModelすべてにデータオブジェクトの操作方法を理解させます。

レポートについて話しているので、データは表示されるだけであると理解されます。ViewModelは、ユーザーインターフェイスの操作を最小限に抑えた単純なデータソースであり、基本的には非常に薄いレイヤーです。

于 2012-06-20T05:13:05.817 に答える
0

私は同じ問題に直面し、この方法で行くことにしました:

MVC でコントローラーのようなクラスを作成し (モデルでいくつかのアクションを実行)、すべての ViewModel でそれらを操作します。

例: アプリケーションには書籍のリストがあります。それらを追加/編集/削除する必要があります。

したがって、モデルがあります:

public class Book {
public int BookId { get; set; }
public string Title { get; set; }
public string Author { get; set; }
}

次に、コントローラ クラスがあります。

public class BookController {
string dbPath = ...;

public void AddBook(string title, string author)
{
            var book = new Book() { Title = title, Author = author };
            AddBook(book);
        }
public void DeleteBook(int id)
{
            using (var db = new SQLiteConnection(dbPath))
    {
                db.Delete<Book>(id);
            }
        }
public void DeleteBook(Book book)
{
            using (var db = new SQLiteConnection(dbPath))
    {
                DeleteBook(book.BookId);
            }
        }
public List<Book> GetAllBooks()
{
            using (var db = new SQLiteConnection(dbPath))
    {
                return db.Table<Book>().ToList();
            }
        }
public Book FindBook(string title, string author, int id)
{
            .....
        }
    }

これで、必要な場所で使用できます。たとえば、次のようになります。

public class BookListViewModel : ViewModelBase {
public BookListViewModel() {
GetData();

}
void GetData()
{
            BookController bc = new BookController(); // here we start using our controller. 
            _books = new List<Book>();
            _books = bc.GetAllBooks();
        }
    }

このようなアプローチは、次のことに役立ちます。

1) すべてのビジネス ロジックを個別に保持する (コントローラー クラスで)

2) コードの重複を避ける

于 2013-04-02T14:35:44.430 に答える