Обновить
23
Карташев Сергей@Elisy

IT-менеджер

Отправить сообщение
Я правильно понимаю, что вы не можете ответить на озвученный мной вопрос в отношении вашего кода?

Ответ на данный вопрос: «Сколько из них можно покрыть юнит-тестами при условии сохранения используемого в статье подхода управления зависимости, и сколько — при использовании IoC?» мы сможем получить после прочтения вашей статьи. Ведь каждый может вкладывать свой смысл в аббревиатуры. Я, например, в преддверии Олимпиады расшифровываю ее как International Olimpyc Committee, а вы, вероятно, имеете ввиду что-то другое. Ситуацию прояснит ваш код, оформленный по общепринятым (непонятно кем) хорошим (непонятно почему) принципам программирования. Но сильно не переусердствуйте, потому что тема тестирования, если ей уделять много внимания, запутает благодарного читателя, и он может не понять суть решаемой проблемы. Ведь мы же не пишем статьи про тестирование, а нацелены на разработку.
Прекрасно. А сколько из вашего (приведенного в статье) кода охвачено тестами?

Охвачено тестами ровно столько кода, сколько охвачено кода тестами при создании нового проекта Asp.Net MVC. Конкретное значение 20 или 80% что-то изменит? Демагогией не надоело заниматься?

А это как раз очень легко сравнимые вещи. Прямо в числовом выражении. В вашей статье, если я не ошибаюсь, описано семь методов. Сколько из них можно покрыть юнит-тестами при условии сохранения используемого в статье подхода управления зависимости, и сколько — при использовании IoC?

Если не надоело заниматься демагогией — продолжним. Жду от вас статьи, оформленной по всем хорошим общепринятым практикам программирования, с учетом IoC, покрытую 100% тестами, в т.ч. изолированными, решающую схожую проблему: прямая регистрация пользователей в базе 1С и авторизация. Дальше продолжим сравнение моего и вашего подходов не на пальцах. Вам отправить архив MSSQL или 1С?
Ну то есть вы не знаете, как. В этом и претензия — ваш код не пригоден для автоматического тестирования, поздравляю.

Я не задавался целью охватить тестами весь код. То, что код не пригоден для автоматического тестирования — голословное обвинение. На любой алгоритм статьи можно написать код проверки, зная, какой результат ожидается от этого метода.
IoC во главе угла.

Для конструктивного диалога нужно сравнивать сравнимые вещи. Не можем же мы сравнивать ваш лозунг из 3х букв и методику из статьи, приводящую к конкретному результату.
Вот как она это делает — и надо описывать. Все остальное — скучно и не ново.

Да ну?! То есть более-менее вменяемые методы прямой записи в базу 1С всем давно известны?
Причина очень проста: как вы будете тестировать, скажем, класс AccountMembershipService (не обращаясь к БД, конечно же)?

Структура классов и методов один в один взята из стандартного проекта Asp.Net MVC 3 из Visual Studio 2010, чтобы разработчики, знакомые с Asp.Net MVC нашли знакомые точки соприкосновения. Поэтому вопрос тестирования конкретного класса AccountMembershipService лучше адресовать не ко мне, а к Microsoft. Если не ошибаюсь, проект Asp.Net MVC в Visual Studio можно создать с включенными классами тестов и ознакомиться с тем, как Microsoft предлагает решить эту проблему. Если кому-то не понравится структура классов, он может сделать свою, это никак не повлияет на описанный метод.

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

Предложите альтернативный подход для сравнения, подходящий под ваши критерии и практики. Будем сравнивать конкретные вещи, а не просто данный подход с неизвестным идеальным.

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

Статья не объясняет, как это происходит. Статья говорит «возьмите утилиту и получите код». Как он работает — не описано.

Вы противоречите себе. С одной стороны вы не находите ничего нового в технологии LinqToSql, но требуете досконального описания этой технологии. Код, получаемый в результате работы утилиты ничем не отличается от стандартного кода для доступа к обычным MSSQL таблицам, получаемым на основе dbml-файлов в Visual Studio. Заслуга утилиты — найти соответствие между человекочитаемыми названиями и непонятными названиями таблиц и полей.
Мой код тестируем, не понятна причина сомнений в тестируемости. То, что подход не попадает под какие-то практики программирования я допускаю, но я также допускаю, что он попадает под другие практики программирования. Думаю, практики – это не очень хороший критерий оценки, потому что субъективны, они могут меняться со временем на противоположные. Давайте оперировать более измеряемыми величинами: временем и деньгами, а философию оставим для других статей и разделов. Подход дает экономию времени, и стоимости. И если вы придете к клиенту и скажете есть решение, позволяющее сэкономить, но нарушающее практику «Dependency Inversion», думаю, что с нарушением этой практики клиент смирится. Интересно, кстати, было бы посмотреть, как вы клиенту будете объяснять, почему он должен доплачивать за точное соблюдение этой практики )))).

То, что все умеют обновлять данные в Linq2Sql – это не новость, но новость заключается в том, что обновление идет данных 1С, которая славится запутанностью своей структуры. И без статьи это обновление займет значительно больше времени, пока вы разберетесь с названиями таблиц и полей.
image

В основу положена технология LinqToSql, а не собственный провайдер.
Не совсем понятно, в чем «плохость» примера. В статье показан именно такой способ доступа. Все понимают, что у любого подхода есть как достоинства, так и недостатки. В некоторых случаях прямой доступ к 1С оправдан, в других – нет.
В том, что особо нового ничего нет — не соглашусь. Статья показывает, как можно получать и обновлять данные в 1С напрямую. Раньше был достаточно хорошо исследован способ только по получению данных. Возможность вменяемого обновления – это новизна.
Смысл подхода — хранить все данные централизованно в 1С без экспорта/импорта в сторонние CMS, экономить время на создании административного интерфейса, экономить на MSSQL, размещенном удаленно у провайдера.
Я почитал про jni4net. Правильно ли я понял, что этот компонент не преобразует Java-библиотеку в .Net-сборку, а является мостом между .Net и Java? Т.е. Java-библиотека запускается на JRE и Java runtime должен быть установлен на компьютере?
Изначально хотелось сделать вывод страницы PDF в изображение. Текущие используемые методы — через виртуальные принтеры.
Действительно, существуют компоненты под .Net, например, iTextSharp. Но он не поддерживал нужную мне операцию.
Я решил посмотреть на лидеров других платформ, в первую очередь на Java. Опыт интеграции Java и 1C мне показался интересным и достойным статьи, несмотря на то, что правильно PDF в изображение так и не удалось вывести.
Вы, случайно, страницу PDF не выводили в картинку? Существует в вашем способе проблема отображения?
Вы очень хорошего мнения об 1С. Всю жизнь работа с PDF в 1С велась через виртуальные принтеры (PDFCreator, UDC, BullZip) и внешние компоненты. Т.е. сторонними средствами. Есть еще варианты: например, счет конвертируется в OpenOffice/Excel, а из него в PDF. Это, наверное, от прекрасной возможности 1С.
Или вы про ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF), который с 8.2.15? Так у него несколько ограничений есть
1. Не поддерживается сохранение в PDF картинок типа Метафайл.
2. Известный баг (+еще несколько багов)
20006661 (SW707626) Сохранение табличного документа в формате PDF
Проблема: При сохранении табличного документа в формате PDF, текст, написанный нестандартным шрифтом, сохраняется в PDF некорректно.

Ну и уж точно 1С не позволит открыть pdf и отредактировать его, а также вывести pdf в набор изображений.
Добрый день. Как при вашем методе поиска влияет водяной знак, накладываемый на изображения? Например, интернет-магазины используют оригинальное изображение от производителя и накладывают на него свой водяной знак. Насколько вероятно найти все одинаковые фотографии с разными водяными знаками на разных веб-сайтах?
1С на Хабре, насколько я знаю, представлен только 1С: Битриксом. Интеграция 1С с веб-сайтами очень популярная тема.
Еще заметил интересный момент при переводе сообщений об ошибках. Может не нужно ошибки совсем переводить?
Например, локализованная версия .Net ругается на русском языке. И по русскому описанию ошибки очень мало информации в Интернет, чтобы устранить эту ошибку. При этом если перевести ошибку с русского обратно на английский, то появляется очень много ресурсов с упоминанием этой ошибки и решением проблемы. Но во многих случаях ошибку не удается перевести самому точно на английский, чтобы прийти к дословному оригиналу.
Отличная статья. Понравилось про сжатие бекапов. Меньше стали занимать места в 5 раз. Раньше архиватором пользовались.
Нет ли возможности выложить локализацию ky DataPicker для братского киргизского народа?
github.com/jquery/jquery-ui/blob/master/ui/i18n/jquery.ui.datepicker-ky.js
Как обстоят дела со скоростью в странах СНГ? Было ли увеличение или изменения почувствовали только жители России?

Иногда нужна обработка изображений на клиенте. Например, отправка красочных html-писем. .Net framework также позволяет отправлять такие письма из 1С.
Очень сомневаюсь, что какая-то библиотека (наверняка, COM-компонент) сравнится по мощи и гибкости с .Net framework'ом.
По документации GFLAx работает на уровне битмепов, значит не предусмотрены операции, например, написания определенным шрифтом на поверхности. Поэтому все тоже самое — сильно сказано. Скорее всего решит только проблему изменения размера для простейшего случая. Опять же — если нужен стандартный размер и заполнить пространство определенным цветом? А если рамкой обрамление сделать?
Как водяной знак ставить в GFLAx — наложением второго битмепа? А рисунки могут быть разного размера. Здесь в статье для любого размера исходного изображения способ даст адекватный, невытянутый результат.
Последняя версия GFL SDK v3.40 вышла в начале 2011 года. С тех пор она не обновлялась. Проект умер?
С 7.7 мало работал. Нужно решать проблему передачи картинки в .Net framework.
В 8.х для передачи подходит тип ДвоичныеДанные и Base64Строка. Для 7.7 нужно искать альтернативу. Можно передать через выгруженный файл на диск, но это некрасиво — ведет к появлению временных файлов.
Еще один из вариантов — генерировать html через Html Agility Pack, подставив сперва в него html-шаблон.
Генерация пойдет примерно в такой форме (код 1С):
	элементШаблон = html.DocumentNode.SelectSingleNode("//table[@class='ProductItemTable']").OuterHtml;
	
	parent = html.DocumentNode.SelectSingleNode("//div[@id='product-body']");
	parent.RemoveAllChildren();
	
	Счетчик = 0;
	Для каждого строка из ИсточникДанных цикл
		
		Если Не ЗначениеЗаполнено(строка.Номенклатура) тогда
			Продолжить;
		КонецЕсли;
		
		item = net.CallStatic("HtmlAgilityPack.HtmlNode", "CreateNode", элементШаблон);
		
		image = item.SelectSingleNode("//img");
		image.SetAttributeValue("src", "index_files/" + (Счетчик % 5) + ".jpg");
		image.SetAttributeValue("title", строка.Номенклатура.Наименование);
		image.SetAttributeValue("alt", "Изображение " + строка.Номенклатура.Наименование);
		
		item.SelectSingleNode("//td[@class='ProductsListDescriptionCol']").InnerHtml = строка.Номенклатура.Наименование + "<br/><br/>Группа - " + строка.Номенклатура.НоменклатурнаяГруппа;
		
		item.SelectSingleNode("//span[@class='OldPrice']").InnerHtml = "" + строка.СтараяЦена + " руб.";
		item.SelectSingleNode("//span[@class='DiscountPercent']").InnerHtml = "-" + строка.Скидка;
		item.SelectSingleNode("//span[@class='YourPrice2']").InnerHtml = "" + строка.НоваяЦена + " руб.";
		
		parent.AppendChild(item);
		
		Счетчик = Счетчик + 1;
		
	КонецЦикла;

Речь шла о продаже одного миллиона лицензий. Наверняка, это завышенные данные от 1С, включающие разные версии 7.7/8.x, но даже, если в 2 раза меньше, то цифра весьма внушительная.

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность