Nano Hash - криптовалюты, майнинг, программирование

Как использовать SOA с nHibernate?

Прежде всего, я поясню несколько слов: когда я использую слово «пользователь», вы должны понимать «пользователь приложения» и «пациент "- это" элемент "слоя модели.

Давайте теперь объясним контекст:

  • В клиентском приложении есть кнопки «получить пациента» и «обновить», текстовое поле «имя пациента» и сетку для отображения пациента. возвращается после нажатия кнопки «Получить пациента».

  • На стороне сервера у меня есть метод GetPatient (строковое имя) WCF, который выполняет поиск восстановленного пациента и выполняет некоторую бизнес-логику для PatientEntity, используемого с nHibernate. Этот метод возвращает PatientDto (отображение из PatientEntity). И у меня есть метод Update (PatientDto Patient) для обновления измененного пациента.

  • Пользователь может изменить возвращенный PatientDto и нажать кнопку «Обновить».

На данный момент у меня есть две идеи для управления «сеансом» с помощью этого сценария:

  • Первая идея: я выставляю свойство «ID» в моем DTO, поэтому, когда пользователь нажимает на обновление, я ищу на стороне сервера «пациент "с указанным идентификатором с помощью nHibernate" GetByID () ", я обновляю результат данными из PatientDto и вызываю nHibernate" Update () < / em> "метод.

  • Вторая идея: я вручную создаю на стороне сервера класс CustomSession (я использую это имя для ясности), который инкапсулирует ISession и предоставляет уникальный идентификатор сеанса, который будет перемещаться между клиентом. и сервер. Итак, когда клиент отправляет серверу PatientDto и уникальный идентификатор сеанса, я могу получить CutsomSession и обновить пациента с помощью методов Update () из ISession

Мне не нравятся эти идеи. Потому что в первом случае много накладных расходов, и он не использует возможности nHibernate. И вторая идея требует, чтобы разработчик сам управлял идентификатором CustomSession между вызовами: это подвержено ошибкам.

Более того, я уверен, что nHibernate предоставляет такой механизм, хотя я погуглил и ничего не нашел об этом.

Тогда мои вопросы:

  • Какой механизм (выкройку) использовать? Конечно, механизм должен поддерживать граф объектов сущности, а не отдельную сущность! "
  • Предоставляет ли nHibenrate такой механизм? *

Заранее спасибо за вашу помощь,

10.07.2011

Ответы:


1

Я не думаю, что это проблема гибернации, и, на мой взгляд, это распространенное недоразумение. Hibernate - это OR-Mapper, поэтому он обрабатывает объекты вашей базы данных и обеспечивает базовую поддержку транзакций. Это почти все.
Решением для управления сеансом в средах клиент-сервер является, например, использование, например, Spring.net, который предоставляет решения (поиск OpenSessionInView) для вашей проблемы и довольно хорошо интегрируется с NHibernate.
Упомянутый вами подход без сохранения состояния предлагает много преимуществ по сравнению с решением на основе сеансов. Например, подумайте о параллелизме. Если ваш comitt не имеет состояния, вы можете просто отреагировать на неудачную операцию Save () на стороне клиента, например, перезагрузив представление.
Помимо двух ваших хороших аргументов в пользу использования Hibernae, если все сделано правильно, безопасность нарушает SQL- Инъекция.

10.07.2011

2

Одна из причин, по которой я обычно не беспокоюсь об инструментах / фреймворках ORM в клиент-серверном программировании, заключается в том, что вы обычно находите свое первое решение с ними. Это помогает сделать серверную часть более не имеющей состояния (и, следовательно, более масштабируемой) за счет некоторых достаточно дешевых вызовов базы данных (выборка по PK обычно очень дешева, и если вы все равно немедленно напишете ее, угадайте, какая база данных вероятна что делать сначала при записи? Возьмите старую запись - поэтому SELECT / UPDATE может быть лишь незначительно медленнее, чем просто UPDATE, потому что он заполняет кеш).

Да, вы делаете вручную то, что хотите отправить в ORM - такова жизнь. И не беспокойтесь о производительности, пока не измерите ее - в этом конкретном случае мне интересно, действительно ли вы можете ее измерить.

10.07.2011
  • Я вижу по крайней мере 2 причины использовать ORM, даже если я использую ваше решение: * ORM не зависит от БД, поэтому я могу изменить его, просто изменив файл конфигурации * Я не беспокоюсь о написании SQL (это уместное замечание, поскольку я ' m C # lad и LINQ, по крайней мере для моего проекта, лучше SQL;)) 10.07.2011

  • 3

    Вот краткое изложение того, что было сказано:

    • Сеанс nHibernate длится время вызова службы. То есть времени вызова «GetPatient (имя строки)» больше нет.
    • Сервер работает с сущностями и возвращает DTO клиенту.
    • Клиент отображает и обновляет DTO. И вызывает услугу «Обновить (PatientDto пациента)»
    • Когда клиент запускает службу «Update (PatientDto Patient)», средство сопоставления получает сущности пациентов благодаря идентификатору, содержащемуся в DTO, с помощью «GetById (int id) "и обновляет свойства, которые должны быть.
    • И, наконец, сервер вызывает функцию nHibernate «Update ()», чтобы сохранить все изменения.
    12.07.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование