@CSharpChatЭта группа больше не существует

Страница 684 из 1888
tm
03.04.2017
15:24:36
А что она делает тогда, прости?

Andrew
03.04.2017
15:24:54
Ilya
03.04.2017
15:25:30
если бы фабрика могла выбирать тип по заголовку, то в ней были бы захаркодены правила для каждого из типов

Google
Ilya
03.04.2017
15:26:12
что то типа, if(Header.Contains("Order") return new Order();

правила в словаре?

что то не похоже на правила

Andrew
03.04.2017
15:26:39
так ты можешь компаратор заодно с классом инжектить

tm
03.04.2017
15:26:46
Надоело

Пойду напишу гист

Ilya
03.04.2017
15:27:07
ОМГ! 2 класса, нахрена огород?

Максим
03.04.2017
15:27:40
что то типа, if(Header.Contains("Order") return new Order();
типа dict.Add("order", () => { return new OrderMail();})

Ilya
03.04.2017
15:27:53
я конечно понимаю, что через 20 итераций оно будет круто, но уже через 5 оно будет работать по другому

Ilya
03.04.2017
15:28:45
отлично! а как создать элемент, когда тебе пришел текст заголовка: "Order #12229 от Васи"?

Максим
03.04.2017
15:29:01
я конечно понимаю, что через 20 итераций оно будет круто, но уже через 5 оно будет работать по другому
мы рассматриваем все варианты, статиком пока самый быстрый в написании

Google
Максим
03.04.2017
15:30:35
короче на десяти классах можно и свич-кейсом сделать. и не парить мозг.

Ilya
03.04.2017
15:30:56
вот и я о том же

Andrew
03.04.2017
15:31:08
это как?
сделай словарь <Func..., Type> или лист из tupple<Func, Type>, получил мессэдж, прогнал коллекцию, когда Func вернул тру, то либо рефлексией, либо из пула дёрнул экземпляр Type и выдал запрашивающему, ну и соответственно все типы реализуют один интерфейс, чтоб не кастить

скорость выборки правд O(n)

но можн чё подумать ещё, как колдунство ускорить

Ilya
03.04.2017
15:32:10
походу тут нужно что то еще. я ведь хочу создавать тот производный тип Mail, который соответствует определенной теме письма в ящике. т.е. если письмо "заказ" - создаем объект класса OrderMail, если письмо с ценами - PriceMaile, как это реализовать?
оригинальный текст задачи говорит, что логика выбора сложная, так что простым словарём не обойтись и надо прогонять анализ данных пока не придёшь к успеху

Ilya
03.04.2017
15:33:25
логика выбора - субстринг темы письма
если письмо с ценами - PriceMaile

не уверен

Andrew
03.04.2017
15:33:52
логика выбора - субстринг темы письма
ну вот и делай как я говрю, когда будешь фабрику настраивать, будешь там-же и компаратор вписывать - меньше шанс оьъебаться

Ilya
03.04.2017
15:34:04
не важно, что от васи, главное order
и какой будет код выбора типа, если есть словарь?

Максим
03.04.2017
15:35:09
ищем вхождение ключа в теме письма. не?

foreach( mail in recieved_mails)

Ilya
03.04.2017
15:35:45
то есть цикл?

и тогда фабрика будет знать как происходит выбор

а это не круто совсем

tm
03.04.2017
15:36:29
https://gist.github.com/tmteam/96e702b58e7c650232ecb7fb7c139c07

Вот

Максим
03.04.2017
15:36:46
foreach( key in dict) if (substring(mail.theme, key) == 1 ) exec dict[key]

Google
tm
03.04.2017
15:37:24
ну вот и делай как я говрю, когда будешь фабрику настраивать, будешь там-же и компаратор вписывать - меньше шанс оьъебаться
Абслютно поддерживаю. Фабрика тем и прекрасна, что за её стенами ты можешь что угодно писать, хоть ассемблерный код и сушёные шлюхи

Максим
03.04.2017
15:38:25
where T: IMailHandler, new() это не понял

Andrew
03.04.2017
15:39:27
foreach( mail in recieved_mails)
говрят тебе, циклом в фабрике компараторы гоняй ` foreach(var comparator in comparators){ if(comparator(message){ // do something } }

Максим
03.04.2017
15:39:59
это я и хотел. написал класс, добавил строчку и все работает ))) спасибо.

tm
03.04.2017
15:40:16
говрят тебе, циклом в фабрике компараторы гоняй ` foreach(var comparator in comparators){ if(comparator(message){ // do something } }
Это абсолютный аналог моего гиста, только у меня "компаратор" это ключ

Тоесть можно сделать Registrate<T?func<> predicate)

Владимир
03.04.2017
15:41:00
https://gist.github.com/tmteam/96e702b58e7c650232ecb7fb7c139c07
если письмо со спамом будет содержать в теме слово order или author, то вся логика развалится

tm
03.04.2017
15:41:59
если письмо со спамом будет содержать в теме слово order или author, то вся логика развалится
я представил общее решение исходной задачи. Если нужно что то сложнее - то нужно использовать решение Andrew dementiev, с регистрацие не по ключу, но по предикату

Vladimir Bondaryuk
03.04.2017
15:52:00
https://gist.github.com/tmteam/96e702b58e7c650232ecb7fb7c139c07
Любой ioc контейнер по servicekey сделает тоже самое. Если проект будет развиваться di будет 100%. Так зачем вилосипед?

Дмитрий
03.04.2017
15:52:32
Может кто класс поглядеть, я в нем интероп использовал и диспоз реализовал

А то он хуйню творит

Ilya
03.04.2017
15:52:40
вот простейший вариант решения, который тебе подойдёт

https://dotnetfiddle.net/LUZ0bO

когда будет больше информации о задаче - можно отделить логику парсинга

добавить регистрации или ещё что нить

Дмитрий
03.04.2017
15:53:30
То файл экплорер вызовер для сейва, то перезапишет, то эксепшн кинет, то в не освободит ресурсы

Google
Ilya
03.04.2017
15:53:34
но в данный момент - это лишнее

Vladimir Bondaryuk
03.04.2017
15:55:04
https://dotnetfiddle.net/LUZ0bO
Выглядит не очень, особенно перебор: получилось вернул, не получилось на следующем классе попробую...

Ilya
03.04.2017
15:55:05
если сделать регистрации по предикату - то тебе надо будет 2 раза парсить всё, потому что логика парсинга будет разбирать текст письма и во время конструирования типа будет происходить разбор

Ilya
03.04.2017
15:55:20
можно зашить любую логику выбора типа письма

и можно за 1 проход по тексту решить что это заказ и распарсить его

самое главное сейчас - когда нет информации о предментной области - сделать понятный и гибкий вариант, когда что то прояснится, можно что то переделать - оптимизировать или ввести новые интерфейсы, но в данный момент - то что нужно, по моему мнению

Admin
ERROR: S client not available

Максим
03.04.2017
16:03:12
а какая нужна информация о предметной области? у меня есть файлы писем в формате msg, мне надо такие же письма забрать с ящика, распарсить и вернуть клиенту класс с данными.

структура писем не меняется

тема не меняется

Дмитрий
03.04.2017
16:09:44
Никто не посмотрит?)

Igor
03.04.2017
16:12:28
Никто не посмотрит?)
ну ты хоть ссылку скинь

Дмитрий
03.04.2017
16:13:01
pastebin.com/03GQjAGb

Максим
03.04.2017
16:21:53
как парсить то?
выдираешь боди и регэксами

Ilya
03.04.2017
16:24:27
вот, пихай всё это в TryCreate и будет теье счастье, потому что когда у тебя будет 7 типов сообщений, парсинг усложнится, если понадобится добавишь регистрации или ещё каких плюшек

Дмитрий
03.04.2017
16:26:28
С drop down в interop excel работал кто?

Google
Ilya
03.04.2017
16:26:29
pastebin.com/03GQjAGb
я бы удалил финализатор

Дмитрий
03.04.2017
16:26:43
Как selected установить?

В нем может быть проблема? Иди он просто не нужен?

Ilya
03.04.2017
16:28:15
pastebin.com/03GQjAGb
и можно ещё добавить проверки на disposed

В нем может быть проблема? Иди он просто не нужен?
он просто не нужен, а если финализатор не нужен - его лучше не писать

pastebin.com/03GQjAGb
ты уверен, что это ок? var newWorkSheet = (Worksheet)_workbook.Worksheets.Item[1]; _worksheets.Add(newWorkSheet);

Дмитрий
03.04.2017
16:31:42
не уверен на самом деле

увидел в 2 местаз

местах*

Ilya
03.04.2017
16:32:25
выглядит очень странно, не работал с excell, но какой то диссонанс

Дмитрий
03.04.2017
16:33:19
а мне показалось, что норм выглядит. Типа уже есть по дефолту одна таблица в книге и ее берем

Ilya
03.04.2017
16:35:09
а зачем одну и туже таблицу добавлять в список?

Дмитрий
03.04.2017
16:35:32
это внешний список же, просто для себя

а на ретурне стоит new которая

Ilya
03.04.2017
16:36:06
(Worksheet)_workbook.Worksheets.Item[1];

тут нет new

Дмитрий
03.04.2017
16:36:31
var newWorkSheet = (Worksheet)_workbook.Worksheets.Item[1]; - берем дефолтную

_worksheets.Add(newWorkSheet); - кидаем в свой, левый массив

Ilya
03.04.2017
16:36:50
и добавляем её в список

Дмитрий
03.04.2017
16:36:52
return newWorkSheet; - возвращаем ту самую дефолнтую

вторую строку вообще убрать можно

Страница 684 из 1888

Эта группа больше не существует Эта группа больше не существует