У меня есть следующие проекты в визуальном решении студии для приложения:Работа с перечислениями, когда интерфейсы находятся в отдельном проекте
- Общие - методы Подсобные и расширения
- Entities - объекты Rich Domain с бизнес-логикой конкретного в случаях
- Хранилища - Данные Хранилища
- DataServices - тонкая оболочка для Хранилища, содержит бизнес-логику, не относящуюся к экземпляру
- Interfac es - Все интерфейсы для сущностей и хранилищ
Причина, по которой я помещаю интерфейсы в отдельный проект, избегает ссылок на круговые проекты. Это позволяет двум проектам ссылаться на общий интерфейс, не позволяя ссылаться на проект с конкретной реализацией.
Я не собирался проектировать ссылки в проекте «Интерфейсы», чтобы избежать ссылок на круговые проекты. Я создаю интерфейс для классов, определенных в других проектах, это позволяет мне ссылаться на интерфейс объекта, противоположный конкретной реализации в других интерфейсах.
Так пример будет:
namespace Acme.Entities
{
public class Person : IPerson
{
string Name { get; set; }
}
}
namespace Acme.Interfaces
{
public interface IPerson
{
string Name { get; set; }
}
}
namespace Acme.Interfaces
{
public interface ITeam
{
string Name { get; set; }
IPerson Leader { get; set; }
}
}
Проблема я столкнулся это, когда интерфейс ссылается на перечисление, определенный в другом проекте. Не двигая перечисления в рамках проекта Interfaces, я не уверен, как ссылаться на перечисления без создания ссылок проекта, например:
namespace Acme.Entities
{
public enum Status
{
Unknown =0,
Active = 1,
Active = 2
}
}
namespace Acme.Interfaces
{
public interface IPerson
{
string Name { get; set; }
Acme.Entities.Status ActiveStatus { get; set; }
}
}
Acme.Entities.Status потерпит неудачу, если я не ссылаться на проекте Acme.Entities , но это создаст циклическую ссылку, поскольку Acme.Entities ссылается на проект «Интерфейсы».
Почему вы против перемещения перечисления в проект интерфейса? –
Мне нужно пойти с @DStanley здесь. Вероятно, вы хотите переименовать свой проект «Интерфейсы» в «Common». –