こんにちは、私はちょうど WCF を学んでいて、私が取り組んでいるダミー プロジェクトに WCF サービスを実装しようとしています。
私のプロジェクトには、データベース内のデータへのアクセスを担当するエンティティ フレームワーク リポジトリを持つ DataAccess プロジェクトが含まれています。モデルとインターフェイスは次のようになります。
public partial class BookModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public string Description { get; set; }
public DateTime PublicationDate { get; set; }
public int CategoryId { get; set; }
public decimal Price { get; set; }
public string BookUrl { get; set; }
}
public interface IBookRepository
{
IEnumerable<BookModel> GetBooks(int pageNumber, int numberOfBooksOnPage);
IEnumerable<BookModel> GetBookByCategory(int categoryId, int pageNumber, int numberOfBooksOnPage);
BookModel GetBookById(int bookId);
int CountBooks();
int CountBooksByCategory(int categoryId);
void AddBook(BookModel book);
void UpdateBook(BookModel book);
void DeleteBook(int bookId);
}
wcf サービスを実装するとき、サービス コントラクトとデータ コントラクトを定義する必要があります。問題は、この 2 つは現在のモデルとリポジトリの正確な複製であるため、何をすべきかよくわかりません。
これは私がこれまでに持っているものですが、これが正しい方法であるかどうかはわかりません:
[DataContract]
public class Book
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Author { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public DateTime PublicationDate { get; set; }
[DataMember]
public int CategoryId { get; set; }
[DataMember]
public decimal Price { get; set; }
[DataMember]
public string BookUrl { get; set; }
}
[ServiceContract]
interface IBookService
{
[OperationContract]
IEnumerable<Book> GetBooks(int pageNumber, int numberOfBooksOnPage);
[OperationContract]
IEnumerable<Book> GetBookByCategory(int categoryId, int pageNumber, int numberOfBooksOnPage);
[OperationContract]
Book GetBookById(int bookId);
[OperationContract]
int CountBooks();
[OperationContract]
int CountBooksByCategory(int categoryId);
[OperationContract]
void AddBook(Book book);
[OperationContract]
void UpdateBook(Book book);
[OperationContract]
void DeleteBook(int bookId);
}
モデルとリポジトリを wcf サービスに移動するのは良い考えですか?
または、リポジトリからメソッドを呼び出すだけの wcf プロジェクトで、この 2 つのクラスの複製を作成する必要がありますか?