2009-04-21 2 views
1

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

assignment 
---------- 
id 
person_id 
assigned_address_id 
position_id 

person 
---------- 
person_id 
current_address_id 
name 
ssn 
drivers_license 

address 
--------- 
id 
address_number 
address_street 
address_city 
address_state 
address_zip 

position 
--------- 
id 
description 
rate 

Я создал следующие классы

Person Class 
int? id 
Address currentAddress 
string Name 
string ssn 
string drivers_license 

PersonAssignment Class 
id 
person_id 
Address assignedAddress 
Position assignedPosition 

Address Class 
string address_number 
string address_street 
string address_city 
string address_state 
int address_zip 

Position Class 
int? id 
string description 
double payment_rate 

Я также создал классы Seprate службы для каждого из объектов, доступ к Dal.Repository и выполнять методы Crud на каждом из объектов. т.е.

PersonService Class 
Update(Person p) 
Insert(Person p) 
GetListOfPeople() 
GetPerson() 

PersonAssignmentService Class 
Update(PersonAssignment p) 
Insert(PersonAssignment p) 
GetListOfPeopleAssignments() 
GetAssignment() 

У меня также есть Хранилища для каждого из объектов

т.е.

PersonRepository Class 
Update(PersonAssignment p) 
Insert(PersonAssignment p) 
GetListOfPeopleAssignments() 
GetAssignment() 

На моей странице, которая содержит как назначение лиц и лиц, личные данные я считаю себя называя PersonService и PersonAssignmentService.

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

Спасибо за любую помощь

Благодарности

ответ

0

дизайн базы данных и классы могут быть иногда трудно критиковать и многое из этого действительно зависит от ваших бизнес-правил и типа сделок, которые Вы имеете.

Для начала у меня не было бы отдельной таблицы для адреса человека, и я бы не создал какой-либо конкретный класс, который определяет и адрес.

Я не уверен, какой язык программирования вы используете, но это, вероятно, будет стоит вашего времени, чтобы проверить ORM (объектно-реляционное отображение)

+0

Выглядит из тегов, как он использует C# ... – Damovisa

1

Что вам нужно сделать, это дизайн и реализовать слой доступа к данным:

http://rlacovara.blogspot.com/2009/02/high-performance-data-access-layer.html

в статье это лучшее, что я видел до сих пор в описании того, как можно было бы написать слой доступа к данным. Автор описывает, что вам нужно создать DTO (объекты переноса данных), чтобы переместить ваши данные с уровня доступа к данным на бизнес-уровень (или на другой уровень, где их можно преобразовать в собственные классы приложений). Он предоставляет базовые классы и код, которые помогут вам с объектами передачи данных, код для заполнения DTO и код для сохранения DTO в базе данных.

В этой статье представлены три статьи, и я рекомендую прочитать весь комплект.

+0

Спасибо, я посмотрю на это. – zSynopsis

0

Я не уверен на 100%, что делает ваша веб-страница, но при условии, что у вас есть идентификатор PersonAssignment, и вы извлекаете из него объект PersonAssignment, а затем сам объект Person, это может сделать проще:

В классе PersonAssignment добавьте свойство, ссылающееся на объект Person, а не только на person_id.Из вашего примера:

PersonAssignment Class 
id 
person_id 
Person person 
Address assignedAddress 
Position assignedPosition 

В методе GetPersonAssignment (который я предполагаю, принимает параметр), сделать некоторую работу, чтобы заполнить объект Person. Вам также необходимо добавить методы Insert и Update, чтобы это учитывать.

0

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

Но, это ничто.

Использование DAO, как упомянуто выше, является отличной идеей. Держите логику раздельной.

Я хотел бы начать с написания DAO, убедиться, что он делает все, что он должен делать, а затем работать на следующем уровне, тем самым вы можете внести любые изменения в необходимую базу данных.

Если вы новичок в C#, вы можете посмотреть на различные инструменты, которые предоставляет .NET 3.5, поскольку было сделано много изменений, чтобы упростить доступ к базе данных, чтобы абстрагировать фактическую базу данных.

Одним из преимуществ этого является то, что некоторые из ваших источников данных могут поступать из файла XML, и ваш DAO будет работать нормально, независимо от фактического источника источника данных.

0

Похоже, вы работаете в рамках, разработанной кем-то еще, где у вас есть классы услуг, репозитории и DAL, и теперь, когда у вас есть все это, вы смотрите на большую кучу кода и спрашивать «нет ли более простого способа». Короткий ответ - да, всегда есть более простой способ. Существует множество способов доступа к данным, так как есть разработчики. Модель, которую вы используете, довольно сложна и звучит так, как следует принципам Domain Driven Design. DDD - отличная методология и обеспечивает отличное разделение проблем и высокую степень проверки. Но это также требует большого количества сантехники, и это не совсем понятно большинству программистов .Net, поэтому получение помощи может быть жестким. Я думаю, что это лучший способ создания корпоративных приложений, но это не лучшая модель для вас, если вы новичок в ООП.

Если вы выполняете небольшой проект, возможно, вы захотите рассмотреть обход BLL вообще, ни один из классов услуг, никаких репозиториев, просто не имеет Common Lib/project, который содержит классы сущностей и создает DLL, которая содержит методы доступа к данным которые непосредственно заполняют и сохраняют ваши сущности.

Еще более простой подход состоит в том, чтобы покончить с классами сущностей и просто вернуть DLL-данные ADO.Net DataTables, которые содержат данные вашего объекта. Этот подход теряет сильную типизацию класса сущности, но его намного проще реализовать.

Другой подход заключается в использовании Entity Framework. EF сделает все это для вас, и он будет генерировать строго типизированные классы сущностей. Потребуется некоторое время, чтобы привыкнуть к EF, но как только вы поймете, как с ним работать, это может значительно сократить время, необходимое для написания кода настойчивости. Для некоторых хороших обучающих программ на EF, проверьте Rob Bagby's blog

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

  • Нет связанных вопросов^_^