|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||||||||||||
Ищу удобный подход18.05.2022, 22:35. Показов 2237. Ответов 30
Метки нет (Все метки)
Уткнулся в дно.
Тема приложения: Messanger Дано: gRPC проект, View проект, прослойка между ними. View ничего не знает о том, откуда и как поступают данные, об этом знает "прослойка". Вводная информация: Дабы сделать этот промежуточный проект более гибким, я подумал, что было бы неплохо предусмотреть возможность смены gRPC на любую другую микросервисную архитектуру одной строкой. Расписал интерфейс конечного результата:
Поднимаю событие, если список сообщений изменился.
Далее я создал реализацию, непосредственно, под gRPC
Как видите, мне пришлось сделать MessageServiceGrpc тоже internal, так как мой абстрактный класс -- internal. В итоге я не понимаю как вывести мне тип "наружу". То есть кривая архитектура получается.
0
|
||||||||||||||||||||||||||
| 18.05.2022, 22:35 | |
|
Ответы с готовыми решениями:
30
UI на Unity. Какой подход для создания UI самый правильный и удобный в плане поддержки, внесения изменений и развития? Ищу удобный и минималистичный движок новостей на подобии Data Life Ищу удобный и простой шаблон для создания интернет-магазина компьютеров |
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 19.05.2022, 23:36 [ТС] | ||
|
Накидал то, как я это вижу. 1. Один проект WCF, другой gRPC -- это серверные части [ голубое ] 2. Далее проект с абстрактными типами для уровня модели и самим абстрактным классом [ красное ] 3. Один проект для реализации абстрактного класса под gRPC, другой проект для реализации абстрактного класса под WCF [ зелёное ] 4. Ну и дальше уже уровни View.
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 19.05.2022, 23:42 [ТС] | ||||||
|
Элд Хасп, показал как это выглядит с неймспейсами:
0
|
||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 20.05.2022, 10:09 | ||
|
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 20.05.2022, 13:52 [ТС] | ||||||
|
kotelok, через абстрактный класс.
Но объективно говоря я всё-таки сталкнулся с некоторыми трудностями. Мне кажется, что могут случиться различия: например в gRPC проекте может быть на 1 метод больше. Пока такой ситуации не возникло, но предположим, в gRPC классе мне нужно будет реализовать ещё 1 метод, допустим Initialize(); (условно). А в WСF такой метод не нужен (условно).В таком случае, как первый вариант, я могу добавить ещё один абстрактный класс:
Я могу добавить этот метод в сам MessangerServiceAbstract, но в WCF реализовать как NotImplemented.
0
|
||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||||||||||||
| 20.05.2022, 14:50 | |||||||||||||
Сообщение было отмечено limeniye как решение
РешениеНо тогда абстрактный класс должен быть чисто контрактом, по сути интерфейсом, и не должен содержать вообще никакого серверно-специфичного кода. Добавлено через 22 минуты СЕРВЕР Логика приложения реализуется на сервере, т.е. на сервере есть какой-то:
Поверх него реализованы внешние точки взаимодействия через: 1. REST. 2. gRPC. 3. WCF. Которые для удобства могут оперировать теми же самыми 'SomeDto'. И задача которых - реализация специфики своего протокола для взаимодействия с внешними клиентами с последующим вызовом единой реализации 'SomeService' (в т.ч. интерпретация исключений от SomeService в специфичные для своего протокола пакеты/коды). * в т.ч. их можно полностью кодогенерируемыми сделать. КЛИЕНТ (тоже на C#, а значит может использовать ту же общую библиотеку DTO и интерфейсов) Допустим, типовой WPF-клиент: View -> ViewModel -> Model. И где-то на уровне 'Model' (или в частных случаях 'ViewModel') вам требуется сделать что-то типа:
* в т.ч. их можно полностью кодогенерируемыми сделать.
1
|
|||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 20.05.2022, 14:52 [ТС] | ||||||
|
kotelok, ну, по сути я это и нарисовал тут
Ищу удобный подход У меня SomeDto и красном прямоугольнике, а вместо ISomeInterface — SomeAbstract, так как у меня есть общая реализация метода поднятия события
0
|
||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 20.05.2022, 15:13 | ||
|
Я просто не уверен, что у нас одинаковое понимание этой картинки. Мне из неё не понятные зависимости сборок, местоположение бизнес-логики, разделение на клиентские и серверные сборки.
Хотя, вероятно, под вашу задачу именно ваш подход окажется более удобным.
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
| 20.05.2022, 17:30 [ТС] | ||||||
|
kotelok, для клиента.
Допустим у вызвал метод await RemoveItemAsync(SomeTypeDto someObject); из ViewModel.
0
|
||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 20.05.2022, 18:06 | ||
|
Тогда да, решение через абстрактные классы - один из вариантов, если есть общий функционал. И тогда тот случай, который вы описывали с недоступностью одного из методов в каком-то протоколе, придётся обходить именно через NotSupportedExeption, т.к. если выдать VM более узкоспециализированную абстракцию, то она в принципе не получит доступа к части функционала.
0
|
||
| 20.05.2022, 18:06 | |
|
Удобный ввод Удобный синопсис
Удобный ридер
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|