私は同じ問題に直面し、この方法で行くことにしました:
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) コードの重複を避ける