Как мне назвать объект-обертку базы данных? - PullRequest
1 голос
/ 18 сентября 2010

Для своего приложения CMS я пишу DLL, которую я включу в свои проекты.Эта DLL будет включать такие функции, как получение всех новостей для определенного проекта.

Например, моя база данных содержит таблицу с названием News.С помощью Entity Framework 4 у меня есть автоматически сгенерированный класс под названием News .Я не хочу, чтобы мои методы DLL возвращали этот объект, а не класс-оболочку, который содержит только свойства.

Как мне назвать этот класс-оболочку?Сейчас я всегда добавляю слово «Контейнер», но со временем мне не нравится этот суффикс.То есть я бы назвал этот класс NewsContainer .

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

Edit : я вручную сопоставляю свойства между моим собственным классом-оберткой и автоматически сгенерированнымкласс структуры сущности, если это имеет какое-либо значение.

Ответы [ 3 ]

3 голосов
/ 18 сентября 2010

Похоже, вы создаете DTO , в таком случае это может быть что-то вроде NewsDto или NewsDTO?

1 голос
/ 19 сентября 2010

Боковая панель: «Новости» уже вызывают проблемы, потому что это зарезервированное слово, и у него есть странные проблемы плюрализации, т. Е. Новые новые, новые новости, новые новости, новые NewNews ().

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

Из вашего примера вы ссылаетесь на NewsArticle, NewsFlash, NewsSnippet или NewsEntry?Есть ли у проекта новости?Есть ли такая вещь, как NewsContainer?На мой взгляд, NewsWrapper может быть пластиковым пакетом или даже резинкой.

Грубо говоря, n-ярус может выглядеть примерно так ...

UI.ProjectNews (presentation)
DTO.ProjectNews
POCO.ProjectNews (logic)
DTO.ProjectNews
EF.ProjectNews (data)

По моему опыту, лучшийспособ разработки любой схемы базы данных или дизайна класса - это ссылаться на вещи так же, как вы это делаете в обычном разговоре.Терминология реального мира вносит большой вклад в производительность, время разработки, обслуживание и совместную работу.

1 голос
/ 18 сентября 2010

Я согласен с вашим первоначальным наименованием вашего класса оболочки / DTO как News. Хранить их в разных пространствах имен с одинаковыми именами - это прекрасно. Это часть того, для чего предназначены пространства имен: чтобы уменьшить коллизии в именах.

Я бы набросал что-то вроде этого

namespace MyCmsApp.Models
{
    public class News {
        public string Title { get; set; }
        public string Body { get; set; }
        public string Author { get; set; }
    }
}

Тогда бы DataLayer возвращал только типы внутри MyCmsApp.Models. Другими словами, как вы и предполагали, сгенерированные EF классы не переходят в ваше приложение.

Примечание: почему вы пытаетесь избежать использования классов EF? Рассматриваете ли вы code-first и / или Model-First? В этих сценариях база данных соответствует проектной модели вашего приложения.

...