将单个项目拆分为多个项目解决方案

split single project into a multiple project solution

我们有一个项目,我们将拆分成一个多项目解决方案。我们将采用实体并将它们放入新的程序集中

当前项目有带 ModelMetadata 和其他属性和方法的 EF Core。

namespace Project.Models.Entities
{
    [ModelMetadataType(typeof(ContactsMetaData))]
    public partial class Contacts
    {
        internal class ContactsMetaData
        {
            [EmailAddress]
            public string Email { get; set; }
        }

        [NotMapped]
        public string IsValid { get {return !string.IsNullOrEmpty(Email);} }

    }
}

由于我们无法从不同的程序集中扩展部分 class,因此这将行不通。我正在寻找另一种解决方案来做到这一点。我试图扩展 class 但它不起作用... 谁能指出我更好的解决方案?

我认为实现它的方法不止一种,您将不得不做出一些设计决策。我假设您希望存储库程序集只关心通过 entity framework 访问数据库。但是业务对象需要额外的属性,比如电子邮件地址。您可以将数据库对象与域对象分离。您可以从描述您的联系人实体的界面开始。

public interface IContact
{
    // properties based on the Contacts you are working with
}

然后您可以在存储库程序集中使用部分 class 来说明 Contacts 实现了 IContact 接口。

public partial class Contacts : IContact
{

}

但您确实需要电子邮件联系方式,因此请使用另一个界面描述该要求。

public interface IContactWithEmail
{
    string FirstName { get; set; }
    string LastName { get; set; }
    string Email { get; set; }
}

并在实现中注入 IContact 依赖项。

public class ContactWithEmail : IContactWithEmail
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }

    public ContactWithEmail(IContact contact, string email)
    {
        FirstName = contact.FirstName;
        LastName = contact.LastName;
        Email = email;
    }
}

你在这里错过的是继承的整个概念。

在这里你可以找到一些关于它和面向对象编程的有用信息:

https://en.wikipedia.org/wiki/Object-oriented_programming
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)