2012-02-09 2 views
-2

Я хочу знать, можно ли улучшить модель отношений между классами ниже. Я использую MongoDB как уровень базы данных.Эффективное проектирование отношений между классами

public class TodoItem { 
private String description; 
private Person person; 
} 

public class Person { 
private List<TodoItem> items; 
} 

Снова мой вопрос касается дизайна классов, в которых задействованы отношения типа «один ко многим» и «двунаправленность». Благодарю.

+0

Всегда ли правда, что сотрудник принадлежит к одному отделу? Во многих корпорациях это не так. – JonH

+0

Как насчет иерархии департаментов? –

+0

Вы должны дать более подробную информацию о контексте –

ответ

3

Это действительно зависит от ваших требований/окружающей среды.

например. у вас есть двунаправленные зависимости. Некоторым приходится беспокоиться, но это приятно для клиента, использующего это. Что важнее? Вам действительно нужно ориентироваться в обоих направлениях более или менее одинаково часто?

Вы храните полные объекты. Возможно, вы должны хранить прокси вместо или id и репозиторий. Никто не может сказать, пока мы не узнаем о ваших требованиях, как функциональных, так и нефункциональных.

На самом деле, если у вас нет требований, дизайн неправильный, потому что у вас не должно быть класса, если это не поможет выполнить требование.

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

Так что, если вы хотите узнать о дизайне, попробуйте следующее:

Возьмите простые функциональные требования и думать о том, как ваши конструктивных изменениях с изменением неработоспособного требования: он должен работать на чип-карте; он должен обрабатывать тысячи запросов в секунду. Много писем, мало читает; Много читает, мало пишет. ...

1

Вам действительно нужно иметь двунаправленные ассоциации? Например, должен ли Департамент знать, к какой компании он принадлежит?

С unidirectionnal association у вас нет связи, Department ничего не должен знать о Company (или измените, если Company изменений). То же самое касается Project, Employee, ...

Без дополнительной информации это все, что я вижу.

+0

Обновлен мой код и оставил комментарий выше. – jsf

+0

Вы полностью изменили свой вопрос, теперь мой ответ ничего не значит. Если вы хотите задать другой вопрос, вы должны создать еще один (и, возможно, ссылку на него здесь). –

+0

Ну, как я уже сказал, мой вопрос был специфичен для дизайна. Я изменил его, чтобы сузить его до двунаправленной ассоциации.Итак, теперь поразительно ваше первое предложение «Вы действительно ...» Как мы можем иметь более простой дизайн без жесткой связи? Включить только идентификаторы? Опять же, мне жаль, что я был слишком расплывчатым в первый раз. Будет помнить о будущем. – jsf

0

Простой ответ будет

public class Company { 
private List<Department> departments; 
} 

public class Department { 
    private List<Employee> employees; 
    private List<Project> projects; 
    private Map<Employee, Project> employeeProject; 
} 

public class Employee { 
    private String name; 
} 
+1

В проекты могут входить люди из нескольких отделов. ИМО эта задача не должна быть упрощенной. –

+0

Я с Алексом на этом, мы не знаем, как проект связан с сотрудниками или отделами, за исключением того факта, что у пользователя много проектов. Это * может * не быть совместимым с оригинальным дизайном. –

+0

Я упростил свой код, чтобы сосредоточиться на одном вопросе, то есть ли человеку нужно хранить идентификаторы элементов или вести список полных TodoItems. И это двусторонние отношения. Жаль, что я был не в первый раз. – jsf

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