|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||||||||||||
Ищу удобный подход18.05.2022, 22:35. Показов 2240. Ответов 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 | |
|
Удобный ввод Удобный синопсис
Удобный ридер
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|