将单个项目拆分为多个项目解决方案
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)
我们有一个项目,我们将拆分成一个多项目解决方案。我们将采用实体并将它们放入新的程序集中
当前项目有带 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)