У меня есть проект, который использует LINQ-to-SQL для обработки данных. У меня есть два основных пространства имен: Biz и Data. Модель данных LINQ находится в Data и помечена как «внутренняя»; пространство имен Biz содержит открытые классы, которые обертывают классы данных LINQ.
Итак, есть Data.Client
и Biz.Client
; последний предоставляет все соответствующие свойства объекта данных, например:
private Data.Client _client;
public int Id { get { return _client.Id; } set { _client.Id = value; } }
Объекты Biz имеют закрытый конструктор (для принудительного использования фабричных методов) и внутренний конструктор, который выглядит следующим образом:
internal Client(Data.Client client) {
this._client = client;
}
Это может использоваться любым из бизнес-классов в библиотеке, но интерфейс (UI) не имеет прямого доступа к модели данных, гарантируя, что бизнес-уровень всегда действует как посредник.
Впервые я действительно много использовал internal
, и это оказалось весьма полезным.