Сложение и вычитание дополнения до двух

Используя шестибитное представление с одним и двумя дополнениями, я пытаюсь решить следующую проблему:

12 - 7 

Теперь я беру 12 в двоичном формате и 7 в двоичном.

12 = 001100 - 6 bit 
7 =  000111 - 6 bit

Тогда, переверну ли я бит для дополнения до двух и добавлю единицу?

12 = 110011 ones complement 
     +    1
    -------
     001101

7  = 111000 ones complement 
    +     1
   ---------
      111001

тогда, Entity Framework 4 (чистый POCO, пользовательский контекст данных) Шаблон репозитория Шаблон единицы работы Внедрение зависимости Контроллер-посредник уровня обслуживания ...

Вот сценарий:

  • Веб-приложение ASP.NET MVC2
  • Entity Framework 4 (чистый POCO, пользовательский контекст данных)
  • Шаблон репозитория
  • Шаблон единицы работы
  • Внедрение зависимостей
  • Контроллер-посредник на уровне обслуживания -> Репозиторий

В общем, все крутые вещи. :)

Поток событий для базовой операции пользовательского интерфейса («Добавление сообщения»):

  1. Контроллер вызывает Добавить (Post) метод на уровне обслуживания
  2. Вызовы уровня обслуживания Добавить (T) в репозитории
  3. Вызовы репозитория AddObject (T) в контексте пользовательских данных
  4. Контроллер вызывает Commit () в Unit of Work

Теперь, Я пытаюсь понять, где я могу разместить свою проверку.

На этом этапе мне нужны два типа проверки:

  1. Простая, независимая проверка POCO, такая как «сообщение должно иметь заголовок». Это кажется естественным подходом для аннотаций данных в POCO.
  2. Сложная бизнес-проверка, такая как «невозможно добавить комментарий к заблокированному сообщению». Это невозможно сделать с помощью аннотаций к данным.

Теперь я читал «Programming Entity Framework, Second Edition» Джули Лерман (что превосходно, кстати) и искал возможность подключения к событию SavingChanges для выполнения «last- минута "проверка. Это был бы хороший способ гарантировать, что проверка всегда происходит всякий раз, когда я делаю «что-то» (добавляю, изменяю, удаляю), но это также немного поздно IMO (поскольку элементы уже находятся в диспетчере состояний) - Итак, что я могу сделать, если проверка не удалась, удалить их?

Конечно, я мог бы заставить мои POCO реализовать интерфейс (скажем, «IValidatable») и вызывать метод этого интерфейса во время этого события.

Но это кажется «слишком поздно» для проверки бизнеса - это ли консенсус?

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

Еще одна кривая для вы - как вы знаете, POCO с EF означают, что POCO имеют все свойства в БД, поэтому у меня может быть свойство «PostID» с аксессорами get / set (поскольку EF необходимо получить / установить эти свойства).

Но проблема в том, что «PostID» - это столбец идентификатора , так как мне защитить поле от явной установки? Э. g, если я (по какой-то причине) сделаю следующее:

var post = service.FindSingle(10);
post.PostId = 10;
unitOfWork.Commit();

Это вызовет исключение SqlException. Как я могу предотвратить это? Я не могу «скрыть» свойство (сделать его частным или даже внутренним), так как POCO находятся в отдельной сборке репозитория.

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

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

[HttpPost]
public ActionResult AddPost(Post post)
{
   try
   {
      IUnitOfWork uow = new UnitOfWork();
      postService.Add(post);
      uow.Commit();
   }
   catch(InvalidPostOperation ipo)
   {
      // add error to viewmodel
   }
}

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

Итак, чтобы это не было вопросом "повсюду", вот мои вопросы:

  1. Простая проверка POCO - нужно ли это делать с помощью аннотаций к данным? Плюсы / минусы / ошибки?
  2. При каких обстоятельствах (если таковые имеются) мы должны подключаться к событию SavingChanges в контексте данных EF, чтобы обеспечить проверку?
  3. Где я должен выполнять сложное проверка бизнеса? В явлении службы или методе POCO (который я могу вызвать из службы). Как я могу создать интеллектуальную / многократно используемую схему?
  4. Как мы можем «спрятать» автоматически сгенерированные свойства POCO от несанкционированного доступа?

Любые мысли будут очень признательны.

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

Спасибо.

ИЗМЕНИТЬ

Приведенный ниже ответ полезен, но я все еще (в идеале) ищу другие мысли. Кто-нибудь еще?

13
задан RPM1984 7 October 2010 в 05:03
поделиться