私はN層アーキテクチャ、つまりデータアクセス層、ビジネスロジック層などで開発することに慣れています。
誰かが私のビジネスロジックに最適な場所についてアドバイスやリンクを提供できますか?
これらすべてをSilverlightアプリケーションのModelsフォルダー内のクラスに配置しますか?
ポール
私はN層アーキテクチャ、つまりデータアクセス層、ビジネスロジック層などで開発することに慣れています。
誰かが私のビジネスロジックに最適な場所についてアドバイスやリンクを提供できますか?
これらすべてをSilverlightアプリケーションのModelsフォルダー内のクラスに配置しますか?
ポール
ビジネスロジックとデータは、通常、MVVMのモデルレイヤーの一部です。ビューはビジュアルであり、ビューモデルはビジネス固有のロジックとデータを操作できるようにする「接着剤」です。
ドメインまたはビジネスに固有のものはすべて、他のアーキテクチャを使用して、他のアプリケーションで再利用できる必要があります。
私は同じ問題に直面し、この方法を取ることにしました: 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();
}
private void GetData()
{
BookController bc = new BookController(); // here we start using our controller.
_books = new List<Book>();
_books = bc.GetAllBooks();
}
}
このようなアプローチは、次のことに役立ちます。
それは良い質問です。答えは、プロジェクトの複雑さと開発者の好みの問題の一部になります。
私が見たいくつかの MVVM プロジェクトでは、VM 部分にすべてを配置しているため、ビューの .cs ファイルは空であり ( 「コード ビハインド」が悪であることは誰もが知っているため </sarcasm>)、モデル ファイルにはパッシブな「ストレージ クラス」が含まれています (つまり、C基本的にカプセル化された構造体)。
一部の単純なプロジェクト (ロジックがほとんどないビューアーなど) では適切な選択となる可能性があります。ただし、プロジェクトが複雑な場合は、すべてを実行しようとするブロブのようなビュー モデルが発生し、管理が困難になります。
Reed Copsey の回答 (ビジネス ロジック/データ アクセスは View/ViewModel から分離する必要があります) は、非常に複雑なプロジェクトに最適なソリューションです。