раннее использование классов - PullRequest
2 голосов
/ 07 декабря 2011

Прошу прощения за любое раздражение, которое может возникнуть.

Так что после некоторого использования классов с ранним связыванием теперь наша команда заметила некоторые недостатки, которые делают классы с ранним связыванием довольно бесполезными.

Проблемы:

  • Медленно, так как он должен подключиться к ws и получить через http, даже если он работает в том же процессе, что и остальная часть системы.
  • Вызывает блокировки SQL, когдаприсоединение к сообщению CREATE в плагине.
  • Любые незначительные изменения в системе и классах должны быть восстановлены, и вещи ломаются.

Так когда они полезны?Где документация MS по этому поводу?Помимо того, как создавать их учебники.

Спасибо, Джон

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

Мы в основном используем ранние связанные типы для нашей разработки.Они имеют смысл, если вы разрабатываете бизнес-логику (безопасность типа, ...).

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

  • Медленно, так как он должен подключиться к ws и получить через http, даже еслион работает в том же процессе, что и остальная часть системы.

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

  • Вызывает блокировки sql при подключении к сообщению CREATE в плагине.

Это не вызвано типами с ранней привязкой.Есть и другие причины для такого поведения.

  • Любые небольшие изменения в системе и классах должны быть восстановлены, и все сломается.

Iтакже не могу согласиться по этому вопросу.Где разница между наличием класса

Account.Foo = "some data here";

или использованием Entity

Entity["new_foo"] = "some data here";

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

4 голосов
/ 07 декабря 2011

Ранняя граница имеет свое место.Мы используем его в наших веб-сервисах.Это обеспечивает более быструю итерацию разработки (например, все строго типизировано, и поэтому меньше отладки, сосредоточенной вокруг магических строк).

Вы упомянули:

• Любое небольшое изменение всистема и классы должны быть восстановлены, и вещи ломаются.

Это на самом деле вариант использования для Раннего связывания.В более поздних сроках вам, скорее всего, придется застрять с критическими изменениями, которые вы заметите только во время выполнения, а не во время компиляции.Исправление во время компиляции экономит вашу энергию.

Вы также упомянули:

• Вызывает sql взаимоблокировки при подключении к сообщению CREATE в плагине.

InВо всех примерах плагинов, которые я видел, поздний предел - это стандарт defacto.По моему мнению, вы не захотите создавать такое большое количество ошибок (особенно если вы генерируете все сущностей) для перемещения в легковесном модуле, таком как плагин.С точки зрения отладки, внутри метода Execute должно быть намного меньше географии.Это смягчает основную причину раннего связывания, как упомянуто ранее.

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

Это основано исключительно на моем опыте разработки в за последние несколько месяцев.Ваш пробег может варьироваться.

...