Лучшие практики Платформы объекта: Что слой должен назвать SaveChanges ()?

Для модели достоверных данных я иду назад и вперед на этом...

Используя рабочий процесс одобрения как пример, скажем, в моем веб-приложении у меня есть страница, которая позволяет пользователю отметить a MyEntityObject для одобрения. MyEntityObject имеет несколько свойств, которые управляют его рабочим процессом одобрения, таким образом, у меня есть общий служебный метод, там названный FlagForApproval(MyEntityObject eo).

Страница должна назвать FlagForApproval (), чтобы установить необходимые свойства только и затем назвать SaveChanges (), когда это готово, или должны, FlagForApproval () сохраняют изменения?

Наличие служебного метода сохраняет изменения, кажется, что это делает немного больше, чем просят сделать (что, если это был всего один шаг в ряду операций?), но в то же время совершение звонка страницы SaveChanges () и передают данные DB, кажется, что это можно было считать слишком близким к обязанностям по слою данных.

Мысли?

(Обновление: FWIW, до сих пор у меня был вызов служебных методов SaveChanges (), тот способ, которым страница только имеет один набор исключений для обработки, или проверка или данные.)

9
задан Brandon 15 January 2010 в 15:04
поделиться

3 ответа

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

-121--2304521-

Как уже говорилось, причина заключается в том, что Range # каждый отправляет succ в его начало, затем в результат этого succ вызова и так далее, пока результат не будет больше конечного значения. Вы не можете добраться от 4 до 0, вызвав succ , и фактически вы уже начинаете больше конца.

-121--752763-

Мое текущее мнение по этому вопросу заключается в том, что после проверки данных всегда следует сохранять изменения на уровне бизнес-логики. Когда пользователь нажимает кнопку «Сохранить», я передаю все объекты, которые должны быть проверены, вниз к BLL, и он решает, нужно ли ().

Мне так же любопытно, как и вам, видеть, что говорят другие, потому что эта проблема (и многие другие) мучает меня с тех пор, как я начал с EF.

2
ответ дан 3 November 2019 в 08:20
поделиться

Это мой опыт того, как я научился и научил себя программированию, в частности, понимание C, это восходит к началу 1990-х, так что может быть немного античным, но страсть и драйв важны:

  • Узнайте о низкоуровневых принципах компьютера, таких как программирование EGA/VGA, вот ссылка на архив Simtel в руководстве программиста C на ПК.
  • Понимание того, как работает TSR
  • Загрузите весь архив фрагментов Боба Стаута , который представляет собой большую коллекцию кода C, которая делает только одно - изучите их и поймите это, а не только то, что коллекция фрагментов стремится быть портативной.
  • Просмотрите в Интернете на Международном конкурсе запутанного кода C ( IOCCC ) и узнайте, как можно злоупотреблять кодом C и понять особенности языка. Худшее злоупотребление кодом - победитель! Скачайте архивы и изучите их.
  • Как и я, я любил печально известный учебник Понзо С, который помог мне чрезвычайно, к сожалению, архив очень трудно найти. Если кто-то знает, где их получить, пожалуйста, оставьте комментарий, и я внесу поправку в этот ответ, чтобы включить ссылку. Есть еще один, который я могу вспомнить - Коронадо [Дженерик?] С Учебник, опять же, моя память об этом туманная...
  • Посмотрите на журнал доктора Добба и C User Journal здесь - Я не знаю, можете ли вы по-прежнему получить их в печать, но они были классикой, может вспомнить ощущение, держа печатную копию в руке и отрываться от дома, чтобы ввести код, чтобы увидеть, что происходит!
  • Возьмите древнюю копию Turbo C v2 , которую, я полагаю, вы можете получить от borland.com и просто играть с 16-битным C программирования, чтобы почувствовать и возиться с указателями... уверен, что это древний и старый, но играть с указателями на нем хорошо.
  • Поймите и изучите Указатели, здесь к наследию Simtel.net - важнейшая ссылка на достижение C Guru 'ship для желания лучшего слова, также вы найдете множество загрузок, относящихся к языку программирования C - я помню, что на самом деле заказывал Simtel CD Archive и искал C-вещи...
-121--2444778-

Честно говоря, при изучении языка C++ я никогда не брал книгу (не пылайте, пожалуйста). Лучший совет, который я могу дать, это перейти на эту страницу и перейти к учебнику. Он охватывает большую часть языка C++ (читать: наиболее часто используемые функции) и сохраняет его максимально простым. Что касается API, которые важны... ну это вопрос предпочтения. Никто toolkit/api действительно «выиграл», но Qt, GTK- (gtkmm) и wxWidgets все большие игроки. Кроме GUI, вы, вероятно, захотите изучить либо необработанные API winsock2 и многопоточности, ЛИБО интерфейсы многопоточности и сети библиотеки повышения производительности. Я согласен, что MFC умирает, и для разработки только Windows C # принимает все большую роль (даже на linux/mono C # начинает зацепляться за... медленно).

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

@ Neil- я не согласен с тем, что онлайн-учебники «плоские». Во всяком случае, стиль, которому они учат вас, может быть ориентирован на читаемость, а не на оптимизацию - что в моем-не-столь скромном-мнении является преимуществом. В своем ограниченном опыте я нашел cplusplus.com ссылку на практически все.

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

  1. Это полностью субъективно и зависит от вашей цели. Сетевые и многопоточные библиотеки Boost, вероятно, являются хорошим началом.

  2. между std:: последовательность, std:: stringstream и getline (std:: istream &, std:: последовательность &). C++ поставляется с целой тонной встроенной функциональности, но не слишком раздутый/огромный/невозможно узнать. Воспользуйся этим. Весь анализ уже встроен.

-121--3329846-

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

Просмотрите утилиту как службу и не думайте о базе данных. «FlagForApproval» звучит как операция базы данных, попробуйте рассматривать метод как нечто вроде «StartApprovalProcess» или что-то другое, связанное с процессом. StartApprovalProcess будет выполнять всю работу и фиксацию.

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

Ex:

  1. LoadToBatchApprovement (MyEntityObject eo)

  2. ValidateApprovalBatch ()...

  3. MeyBatchToProcessing ()...

1
ответ дан 3 November 2019 в 08:20
поделиться

Я не уверен, что есть правый или неправильный ответ, но он чувствует себя чище (IMO), чтобы FlagformApplation обрабатывать процесс для запуска рабочего процесса. Это включает в себя рассказывание DataLayer для сохранения состояния объекта (I.e. Savechanges). Однако это предполагает, что у вас есть бизнес-требования, утверждающие, что после запуска рабочего процесса состояние должно быть сохранено так, если что-то происходит (I.e. Сервер аварии) Процесс рабочего процесса продолжается с последнего шага.

0
ответ дан 3 November 2019 в 08:20
поделиться
Другие вопросы по тегам:

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