c# - DataAccessLayer 和组织解决方案

标签 c# entity-framework-6 repository-pattern

我有一个 MVC 解决方案:

在我的不同文件中:

库.DataAccessLayer.LibraryContext.cs :

namespace Library.DataAccessLayer
{
    public class LibraryContext : DbContext
    {
        public LibraryContext() : base("DefaultConnection")
        {
        }

        public DbSet<Book> Books { get; set; }
        public DbSet<Author> Authors { get; set; }
    }
}

库.DataAccessLayer.Models.Author.cs :

namespace Library.DataAccessLayer.Models
{
    public class Author
    {
        [Key]
        public int AuthorID { get; set; }

        [Required]
        [StringLength(50)]
        [Display(Name = "First Name")]
        public string FirstName { get; set; }

        .........

    }

}

库.DataAccessLayer.Repositories.AuthorRepository.cs :

namespace Library.DataAccessLayer.Repositories
{
    public class AuthorRepository : IDisposable, IAuthorRepository
    {
        private LibraryContext context;

        public AuthorRepository(LibraryContext context)
        {
            this.context = context;
        }

        public IEnumerable<Author> GetAuthors()
        {
            return context.Authors.ToList();
        }

        public Author GetAuthorById(int id)
        {
            return .........
        }

        ............
    }
}

在 Library.Controllers.AuthorController 中:

namespace Library.Controllers
{
    public class AuthorController : Controller
    {
        private IAuthorRepository authorRepository;

        public AuthorController()
        {
            this.authorRepository = new AuthorRepository(new LibraryContext());
        }

        public ActionResult Index()
        {
            var authors = authorRepository.GetAuthors();

            return View(authors);
        }
    }
 }

1/这个架构是连贯的?

2/为在我的存储库类中实现的存储库声明接口(interface)真的有用吗?

3/在我的AuthorRepository中,LibraryContext的声明和调用是否正确?

4/在我的 AuthorController 中,我对 AuthorRepository 的声明和调用是正确的吗?

5/我们可以将文件 LibraryContext 放在哪个文件夹中? (如果有必要和有用的话)

6/将存储库接口(interface)和存储库类分组在同一个文件夹中好吗?如果没有,各个文件夹如何区分和命名?

7/如何改进?

我需要你的建议。

谢谢

最佳答案

  1. 我发现架构很简单,这很好,也许随着您的应用程序的增长,您将需要更多层
  2. 是的,非常好,特别是如果您要使用依赖注入(inject),这会导致下一个问题。
  3. 您的实现是正确的,至于依赖关系,您应该使用一些设计模式,例如依赖注入(inject)或工厂。您的所有依赖项都应在外部实例化。
  4. 这个应该和上一个一样,repository应该在外面实例化。
  5. 该结构应该可以满足您的需求,但我在 here 中找到了示例很有用
  6. 许多开发人员都是这样做的,有些人也是这样做的,还有一些人,比如我,将它们保存在单独的文件中,我个人在我的存储库旁边创建了一个“契约(Contract)”文件夹,并将接口(interface)保存在那里。
  7. 找到适合您的约定的最佳方法是阅读其他开发人员的代码,您会在其中找到许多样式、结构、架构和模式实现。

我希望你觉得这有用,愿原力与你同在

关于c# - DataAccessLayer 和组织解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40963740/

相关文章:

c# - Winforms 日志框架

c# - 使用 WebApi 和 Entity Framework 6.XX 从数据库中获取表数据

entity-framework-6 - 具有自动 CRUD 日志记录的数据库优先方法

c# - Entity Framework 6 w/DatabaseGenerateOption.Compulated : column does not allow nulls. INSERT 失败

c# - 意外的异步/等待行为

c# - 如何阻止我的 Xamarin.UITest 运行两次测试?

c# - 拆分一个独特的角色

repository - DDD : Repositories are in-memory collections of objects?

c# - 在大型项目中使用通用存储库/工作单元模式

c# - 存储库的通用 Linq 查找方法