2010-09-18 1 views
1

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

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

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

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

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

+1

Предлагаемый класс «Новости» - это ваш класс модели домена или контекст вашего объекта? Вы сказали, что хотите вернуть класс, содержащий только свойства, поэтому я не был понятен, о чем вы говорили, поскольку созданная модель домена должна иметь «только свойства». –

+0

Ну да, оба класса содержат только свойства. Но почему-то мне кажется, что нехорошо подвергать класс контекста объекта другим проектам. Например, я мог бы добавить дополнительные свойства в свой класс. Я думаю, это также возможно с EF4, но я этого не понял, но это больше связано с этим вопросом. Http://stackoverflow.com/questions/3630653/how-can-i-improve-my-business- layer-objects-mapping-in-a-database-is-it-time-f – citronas

ответ

1

Я согласен с вашим первоначальным названием вашего класса обертки/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 и/или модель-первый дизайн? В этих сценариях база данных сводится к проектированию объектной модели вашего приложения.

+0

Модель-первая, потому что я всегда создавал приложения именно так. У меня по-прежнему возникают проблемы с использованием Entity Framework больше, чем DataContext. У меня возникли проблемы с запуском, так как вы можете увидеть здесь: http://stackoverflow.com/questions/3700637/how-do-i-correctly-set-an-association-between-two-objects-in-entity- Я не могу найти хорошую книгу или онлайн-учебник? Вы можете порекомендовать его? – citronas

3

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

1

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

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

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

Грубо говоря Многозвенное может выглядеть примерно так ...

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

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

Смежные вопросы