Я начинаю новый проект с несколькими слоями и несколькими типами клиентов (WebApp, WebAPI, Xamarin и Windows).Я хочу попробовать «Чистую архитектуру».
Мои предыдущие приложения не имели прикладного уровня, мои модели представлений были напрямую связаны с Entity Framework DbContext
.У меня также очень мало опыта работы с ASP.NET и веб-разработкой.
Да, этот вопрос похож на следующий:
Соглашения об именах для модели в многослойном приложении
Соглашение об именах файлов для слоев
но я не спрашиваю, как организовать свою архитектуру, подробнее об использовании объектов с одинаковыми именами классов из разных слоев в одном файле илив конечном итоге меняя свое соглашение на использование UserBO
именования в доменном слое, например.
Проблема
Итак, в слое постоянства у меня есть класс POCO под названием «Пользователь».
namespace Persistence.Entities
{
public class User
{
// (...)
}
}
В слое «Домен» у меня также есть класс под названием «Пользователь».
namespace Domain.Entities
{
public class User
{
// (...)
}
}
В клиентах Windows и Android я создам ViewModels, но я могу просто назвать его«UserVM» и это не проблема.В WebAPI будет «UserDTO», поэтому проблем тоже нет.Но на прикладном уровне я хочу создать метод, который использует два класса с одинаковыми именами:
using System.Collections.Generic;
namespace Application
{
public class Users
{
public List<Domain.Entities.User> GetConnectedUsers()
{
List<Persistence.Entities.User> usersFromDb = new List<Persistence.Entities.User>();
List<Domain.Entities.User> usersToReturn = new List<Domain.Entities.User>();
// take users from database, make domain objects
return usersToReturn;
}
}
}
Я не хочу писать Persistence.Entities.User
и Domain.Entities.User
на моем прикладном уровне.
Что я могу сделать, чтобы справиться с этим?
До сих пор я понял, что я могу использовать псевдоним для using
в C #, например:
using Persistence = Persistence.Entities;
using Domain = Domain.Entities;
namespace Application
{
public class Users
{
public List<Domain.User> GetConnectedUsers()
{
List<Persistence.User> usersFromDb = new List<Persistence.User>();
List<Domain.User> usersToReturn = new List<Domain.User>();
// take users from database, make domain objects
return usersToReturn;
}
}
}
Может быть, есть какой-то лучший способ справиться с этим?
Или, может, мне стоит добавить какой-нибудь суффикс к моим объектам слоя домена?UserBO
(для BusinessObject).Будет ли это правильно?Извините, если это глупый вопрос, но, как я уже писал, у меня нет опыта разработки с таким количеством слоев.
Я думаю, что последнее, что я хотел бы сделать, - это присвоить имя изменению для объектов базы данных, потому что будет гораздо большетаблиц, чем объектов домена, поэтому короткие имена будут более полезными на уровне постоянства, чем на уровне домена.