次のコードを実装しましたが、インターフェイスで何が起こっているのかわかりません。Project.Web と Project.Core の 2 つのプロジェクトがあります。
Project.Web には、DataSource インターフェイスを実装する Infrastructure 名前空間があります。
namespace Project.Web.Infrastructure
{
public class ProjectDataSource : DbContext, IProjectDataSource
{
public ProjectDataSource() : base("DefaultConnection") // 1) What is this constructor doing?
{
}
public DbSet<Set> Sets { get; set; }
public DbSet<Card> Cards { get; set; }
void IProjectDataSource.Save() // 2) This method isn't even defined in the interface, what value does it provide?
{
SaveChanges();
}
IQueryable<Card> IProjectDataSource.Cards // 3) This gets me a list of Cards, but from where?
{
get { return Cards; }
}
IQueryable<Set> IProjectDataSource.Sets
{
get { return Sets; }
}
}
}
今、Project.Core には IProjectDataSource というインターフェイスがあります。
namespace Project.Core
{
public interface IProjectDataSource
{
IQueryable<Card> Cards { get; }
IQueryable<Set> Sets { get; }
IQueryable<Side> Sides { get; }
void Save();
}
}
Web プロジェクト コントローラー内には、次のようなコードがあります。
namespace Project.Web.Controllers
{
public class SetController : Controller
{
private readonly ProjectDataSource _db;
public SetController(ProjectDataSource db)
{
_db = db;
}
質問 1 ~ 3 はコードにあります。私の最後の質問は 4) 最後のコード ブロックで正確に何が起こっているのか? SetController のコンストラクターを使用すると、コードの結合が少なくなるのはなぜですか?
明確な例を示したポインタがあれば役立ちます.MVCアプリケーションにサービスレイヤーを実装できるように、インターフェイスを理解するのに非常に苦労していますが、少し苦労しています. 本当にありがとう。