Соглашение об именах для объектов в многоуровневом приложении с EF6, доменом, DTO, ViewModel - PullRequest
0 голосов
/ 11 июля 2019

Я начинаю новый проект с несколькими слоями и несколькими типами клиентов (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).Будет ли это правильно?Извините, если это глупый вопрос, но, как я уже писал, у меня нет опыта разработки с таким количеством слоев.

Я думаю, что последнее, что я хотел бы сделать, - это присвоить имя изменению для объектов базы данных, потому что будет гораздо большетаблиц, чем объектов домена, поэтому короткие имена будут более полезными на уровне постоянства, чем на уровне домена.

...