2013-06-30 9 views
1

У меня есть следующие классы;Лучший способ структурирования C# Класс

public class Hotel 
{ 
    public int HotelId {get; set;} 
    public string Name {get; set;} 
    public string Address {get; set;} 
    public string City{get; set;} 
} 

public class District 
{ 
    public int DistrictId {get; set;} 
    public string Name {get; set;} 
} 

Тогда мне нужен класс, который может содержать как DistrictId и HotelId как пара, так что я думал о создании класса, как показано ниже

public class HotelDistrict 
{ 
    public int DistrictId {get; set;} 
    public int HotelId {get; set;} 
} 

Является ли это правильный путь? Или их лучшая альтернатива?

+1

Вы также можете использовать 'Словарь ' где ключ может быть окружному идентификатор и стоимость идентификатора отеля. – Tim

+5

Не могли бы вы объяснить, зачем вам нужен класс и как вы его используете? – svick

+0

Да, я тоже думал о Словаре, но является ли он предпочтительным/правильным способом? – Tommassiov

ответ

7

Это очень похоже на дизайн таблицы базы данных. В мире ООП вы обычно добавляете ссылки на классы, а не только на ids.

Что-то вроде этого

public class HotelDistrict 
{ 
    public Distric District {get; set;} 
    public Hotel Hotel {get; set;} 
} 

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

+0

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

+0

Спасибо, это то, что я думал, будет именно так, просто ссылка на класс, ссылающийся на свойства, которые я хочу. – Tommassiov

0

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

+0

Я использую классы для хранения данных из поля XML, которое я получаю, что в свою очередь мне нужно хранить в разных таблицах базы данных. – Tommassiov

+0

@ Tommo1977 В этом случае тот, который вы отметили как решение, хорошо! –

7

Отель и район имеют many to one relationship. Таким образом, отель должен иметь отображение в соответствующий район -

public class Hotel 
{ 
    public int HotelId {get; set;} 
    public string Name {get; set;} 
    public string Address {get; set;} 
    public string City{get; set;} 
    public int DistrictId{get; set;} 
} 
+2

Хотя ссылка на «Район» будет предпочтительнее. – ja72

+0

Да, это может быть только собственность в классе. –

0

По любой причине, если вам действительно нужно идти с оригинальным HotelDistrict образом, вы на самом деле не нужен новый класс, вы могли бы просто использовать Tuple<Hotel, District> для хранения пар и список этих кортежей (например, List<Tuple<Hote, District>>) для хранения списка этих пар.

Но, как заявила Рохит Ватс, существует соотношение * -1, поэтому лучше иметь ссылку на район как поле, поэтому я рекомендую его подход, если у вас нет конкретной причины для использования вашего первоначального подхода ,

0

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

class Hotel 
    int HotelId 
    int DistrictId 
    ... 

class District 
    int DistrictId 
    ... 

class HotelsInDistrict 
    int DistrictId 
    List<int> HotelIds 

Достоинства: Это слабосвязанное, вам не нужно возиться с болезненной вещью, как махина графы, ленивой/жадной загрузка и вещи. Он «по существу», а не только для контейнеров данных. Он слабо связан и позволяет легко модифицировать.

Недостаток: он не легко сопоставляется с вашими таблицами базы данных. Но никакая реальная объектная модель не делает, если это больше, чем ориентированный на данные куча «классов», которые являются просто представлениями таблиц.

Тем не менее, есть книга, которую я очень рекомендую всем, кто интересуется моделированием объекта:

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