我遇到了同样的问题并决定这样做:
我在 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) 避免代码重复