Необходимо ли использовать частичный класс через проекты?

Для тех, кто не знает, как использовать PDO (исходя из функций mysql_), я сделал очень, очень простую PDO-обертку , которая представляет собой один файл. Он существует, чтобы показать, насколько легко выполнять все обычные приложения, которые необходимо выполнить. Работает с PostgreSQL, MySQL и SQLite.

В основном читайте

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

Мне нужен один столбец

$count = DB::column('SELECT COUNT(*) FROM `user`);

Мне нужны результаты массива (key => value) (т. е. для создания selectbox)

$pairs = DB::pairs('SELECT `id`, `username` FROM `user`);

Мне нужен результат одной строки

$user = DB::row('SELECT * FROM `user` WHERE `id` = ?', array($user_id));

Мне нужен массив результатов

$banned_users = DB::fetch('SELECT * FROM `user` WHERE `banned` = ?', array(TRUE));

42
задан Jeffrey Bosboom 4 July 2015 в 02:33
поделиться

5 ответов

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

(Ваш исходный файл DAL должен был бы объявить, что класс был неравнодушен также, между прочим.)

79
ответ дан Jon Skeet 26 November 2019 в 23:35
поделиться

Я не могу ответить на Ваш вопрос о лучшем способе организовать Ваши слои, но я могу попытаться ответить на Ваш вопрос о том, как лучше всего эмулировать частичные классы.

Вот несколько мыслей:

  • первой вещью, которая приходит на ум, является наследование. Это всегда - не обязательно лучшее решение, но у Вас не может быть выбора, так как Вы, возможно, должны быть в состоянии иметь свои объекты быть в состоянии рассматриваться как базовый класс.
  • Состав является также хорошим выбором (то есть, обертывая класс в другой класс). Это дает Вам немного более хорошее разъединение от Вашего DAL, но может быть утомительно для реализации.
  • , Если действительно просто необходимо добавить метод или два на существующий класс, Вы могли бы также рассмотреть использование дополнительный метод , но они могут быстро создать запутанный код при использовании их слишком много.
5
ответ дан Jason Baker 26 November 2019 в 23:35
поделиться

Частичные классы должны существовать в том же блоке. Иначе, как компилятор решил бы, где объединить частичные классы с?

4
ответ дан Kent Boogaart 26 November 2019 в 23:35
поделиться

Я соглашаюсь с ответом Jon Skeet.

я не думаю, что это был бы хороший выбор приблизиться к проблеме как это так или иначе. Уже существуют хорошие шаблоны разработки там, которые демонстрируют лучший способ разделить Ваши уровни/слои кода, и это - просто немного синтаксического сахара так, чтобы Microsoft могла заставить файлы разработчика WinForms/WebForms разделить и препятствовать тому, чтобы люди повредили их.

0
ответ дан Neil Barnwell 26 November 2019 в 23:35
поделиться

В то время как я согласовываю с Вами Neil когда дело доходит до pre-linq разработки, мне также жаль, что я не мог быть в состоянии сделать это для разделения бизнес-логики от частичных классов, сгенерированных разработчиком Linq2SQL. Например:

Northind.DAL (prj)
-NorthindDataContext (EntityNamespace set to "Northwind.BLL")
--Product() (Entity, partial class auto-generated)
--Category() (Entity, partial class auto-generated)
--Supplier() (Entity, partial class auto-generated)

Northind.BLL (prj)
-Product() : IMyCustomEnityInterface, BaseEntity (override OnValidate(), etc)
-Category() : IMyCustomEnityInterface, BaseEntity (override OnValidate(), etc)
-Supplier() : IMyCustomEnityInterface, BaseEntity (override OnValidate(), etc)

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

0
ответ дан user47460 26 November 2019 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: