Должна ли структура классов отражать структуру БД? - PullRequest
0 голосов
/ 21 октября 2010

Извините, если это нубиш, но я новичок в развитии и учу себя.

Допустим, у меня есть 2 стола

биографический
Имя (строка)
Дата рождения (дата / время)
BloodType (int)

BloodTypes
BloodTypeId (int)
BloodTypeName (строка)

Когда я извлекаю запись, я использую объединение, поэтому я извлекаю BloodTypeName, а не просто ID.

Теперь, должна ли моя классовая структура отражать эти таблицы, или я могу создать класс "Person" с

public class Person {
  string Name;
  DateTime Birthdate;
  string BloodType;
}

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

Буду признателен за понимание передового опыта.

Ответы [ 4 ]

2 голосов
/ 21 октября 2010

Нет, это определенно не должно отражать структуру базы данных, если у вас есть веские основания не делать этого.

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

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

Кроме того, вы можете получить как идентификатор, так и имя группы крови, а также данные о человеке и создать объект группы крови для хранения в объекте человека:

public class BloodType {
  int Id;
  string Name;
}

public class Person {
  string Name;
  DateTime Birthdate;
  BloodType BloodType;
}
0 голосов
/ 21 октября 2010

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

Нет необходимости смешивать эти подходы.Так что => не отражайте эти структуры.Вы прекрасно строите класс Person таким образом.

0 голосов
/ 21 октября 2010

Хей, Эндрю .. Да, это должно отражать структуру БД,

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

0 голосов
/ 21 октября 2010

Я бы разделял отображение классов и классов данных.

Классы данных должны иметь любую и всю информацию, представленную в базе данных, чтобы иметь возможность ее изменять. Теперь, если вы хотите отобразить конкретную информацию для пользователя, вы можете написать отображающие классы, которые просто имеют конкретную необходимую информацию. Затем вы просто сопоставляете их - либо сами, либо с помощью библиотеки, например automapper , я использую это сам, и это довольно удобно и отнимает у вас много работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...