SadKo, Нет с биг дата не имел дело. Вероятно, что там нужна скорость, но опять таки позволь заметить не везде. Если мне нужно гуи которое настраивает сервак или другие полезные утилиты, скорость в таких инструментах мне не нужна. Мне нужно в этих случаях скорость разработки этих гуев. Что касается разработки игр, то да, скорость там важна. Но опять таки, думаю что они юзают уже хорошо зарекомендовавшие себя паттерны, свои собственные, а не городят для каждой игры, что-то принципиально новое. О реинжиниринге не было речи. Рефакторингом по моему опыту, у программеров часто не хватает времени заниматься. Реинжиниринг для меня это reverse engineering это совсем другая песня. В другом значении я не сталкивался с этим.
Ну вот например, давай так. Что ты используешь для доступа к базам данных. Базы данных это тяжелый случай, так как по своему характеру базы данных близки к процедурному программированию в силу того, что доступ к данным приходится получать из таблицы. Думаю понятно о чем я. Так какой шаблон используешь для получения данных из базы данных? У меня выработан шаблон по которому я получаю любые данные из любой базы данных, меняется только небольшая часть этой архитектуры экономя мне время.
Ну так с этого и надо начинать. Формочки и кнопочки лабать - это вам не закачивать параллельно логи предоставления сервиса пользователям в 8 СУБД, где нагрузка исчисляется дисятками миллионов записей в час. Вы же пытаетесь возвести свой подход в абсолют, а это в корне неверное решение. Сначала понимаем проблему - затем строим стратегию её решения, после чего уже пишем код. Формошлёпы и кнопкодавы в принципе этого не способны сделать. Здесь нужны дядьки посуровее, с большим опытом разработки различных приложений. Different hardware platforms - different solutions. Это плохое владение терминологией и понимание сути вещей. Вы смешали рефакторинг, реинжиниринг и реверс-инжриниринг между собой.
Ой, только не говорите, что вы там используете Hibernate. Это днище. Если нам нужно вытянуть одну запись из БД - мы просто задействуем механизм рефлексии и аннотации. Метод занимает от силы пару экранов кода, при этом сам автоматом распихает соответствующие поля по геттерам-сеттерам. Считайте это как паттерн factory method. Если нужно выдернуть блок данных из БД - то также можно задействовать паттерн builder, чтобы собрать параметризованный запрос и выполнить его. Дальше получаем ResultSet и делаем всё, что захотим с ним.
SadKo, ты ошибаешься, я говорил о профайлинге и рефакторинге, не привязывай ко мне термины о которых я не говорил. Different hardware platforms - different solutions. Это высказывание мне не ясно. Что значит для программера даже высоконагруженного сервака hardware? Мне казалось, что они юзает в 3 колце, и в ядро где и прячется хардваре он не имеет доступа. Или ты имеешь в виду различные райд системы, так опять они юзаются без ведома прикладного программера. Или же ты имеешь в виду что они лезут в ассемблерный код и там улучшают производительность?
SadKo, ResultSet ResultSet ты серьезно? Ну это слишком процедурно для моего вкуса. Предпочитаю Strategy и чтобы возвращал мне объекты классов. А ковыряение только в одном месте в одном классе, где я с ResultSet и парсю, создавая объект, который получаю подписавшись на событие. Как-то так. Наверно это не быстро, но позволяет мне контроллировать что не быстро и избавлятся от этого в стройном приложении. Не находишь, что это удобней чем лазить по структурному быстрому коду, значение которого знает только один программер в мире?
SadKo, и последнее на сегодня и важное. Давай-ка разберемся сэтими дядьками которые делают высокоскоростной код. Вопросы такие: -Они не юзают свои шаблоны? -Они не юзают никакие шаблоны? -Если они шаблоны вообще не юзают, что же они процедурно программируют? (скорее всего наверное используют мултитрейдинг, думаю этим в основном эти товарищи берут) Что они классы вообще не используют во имя его величества скорости? И еще наверное они большие доки в concurrent data changes в базах данных. Это когда надо чтобы много потоков одновременно записывали в одну таблици. Здравый смысл подсказывает эти вектора интереса
SadKo, Слово реинжиниринг ты ввел сам и попытался привязать это слово ко мне и обвинить в незнании терминологии. По-моему это не этичное поведение и достойно извинения, не находишь, дядя?
Тут надо бы пояснить. Забавно получается, тут мне указывают на то что я говнокодер и понятия не имею о таких высоких материях как высоконагруженные приложения, а типа гуишками занимаются лузеры и недопрограммисты. А лавры крутого джава программера меня собственно не прельщают. (хотя хорошо платят Открою маленький(но только часть ее) секрет. Джавой я стал заниматся не от хорошей жизни. Я пришел к выводу, что возможностей Иды мне маловато(по крайней мере то что предлагается бесплатно и по умолчанию) мне нужно несколько другие фишки. Реализовывать это на питоне не камильфо, так как приложение, которое мне нужно требует достаточно сложное и программить на питоне это будет непросто. Поэтому выбор пал на джава, а не на шарп,( думаю причины понятны). Поэтому, да чуваки, мне нужно говно приложение на яве, но которое будет изменять ассемблерный код и не только. вот и все, почему я потратил год с небольшим на разработку приложений на джава. Пришлось не от хорошей жизни углубится в дебри Code complete and Design Pattern. Да, я сделал пару серваков, которые принимают запросы моего приложения. Да, оно не думаю, что скоростное,но думаю что этого мне более чем достаточно. Ежели бы я хотел создавать скоростные приложения для доступа к базам данных и к серверу, то уж поверьте дорогои друзья, здесь бы не искал инфу, а шел бы на целевой сайт, где люди обсуждают такие вещи. Вот такой обзор, собственно позиции, где я, вы и все остальное.
и в данный момент, я занимаюсь подготовкой к возможному созданию убийцы Телеграмм мессенджера. Это возможно, но вопрос во времени. Желательно для этого команда. (Знаю, знаю сейчас начнется...)
Смотри, Садко, предлагаю тебе честный батлл, чтобы не голословить и не говорить у кого толще и длиннее. Условия такие: 1) Каждый из нас предоставляет код, пусть это будет а) сервер(только часть принятия соединений) обработку данных можно опустить. б) способ работы с базами данных. Весь этот код у меня под рукой. код должен быть рабочий(либо юнит тест либо просто static void main(String [] args) думаю ты знаешь о чем это я. 2) Мы просто и по-деловому без оскорблений обсуждаем код друг друга и видим кто на чем стоит. Критикуем так сказать без личностей а просто как джентельмены. Далее указываем на слабые и сильные места. Пусть честной народ будет нам судьей. 3) Баттл должен быть таким: Если например ты первый предоставляешь код сервака с пояснениями, то тогда до начала твоего описания я должен буду выложить шифрованный зип файл, который сможет скачать любой на васме, но который никто не сможет расшифровать пока я не выдам ключа Для чего? Думаю очевидно, чтобы не обвинили в плагиате. То есть может получится так, что наши коды схожи и тогда у тебя может возникнуть сомнения, что я не сплагиатил твой код, таким образом становится неясным, то ли мой код был подобен твоему, либо я смухлевал. 4) сначала я даю шифрованный зип потом ты даешь свой код и объесняешь как он работает. Затем ты даешь шифрованный зип с работой базы данных, а я предоставляю свой код с объяснениями. 5) На сборы сутки. 6) никаких оскорблений и сарказма, с твоей и моей стороны, за других мы не ручаемся. При любом исходе. 7) Это очевидно, что код должен быть на джава. Согласен?
Одну и ту же программу можно написать разными способами, и она будет выдавать одинаковый результат при одинаковых входных данных. Однако вы переносите эту программу на другую платформу и с ужасом обнаруживаете, что она работает в 10 раз медленнее, чем ожидалось. Приходится переписывать программу с поправкой под новую платформу, то есть осуществлять реинжиниринг (что такое рефакторинг - я уже вам выше написал). Тут даже не речь об асм-коде, от изменения представления структуры данных в памяти многое зависит. А теперь почитайте про рефлексию и аннотации. В Java можно всего лишь передать класс в метод, а на выходе получить объект этого класса с заполненными полями. При этом, сам запрос можно сформировать внутри этого единственного метода, который вытянет данные таблицы. А теперь представьте ситуацию: вам надо обновить 1000 однотипных записей, замапленных в java-объхекты. Как вы будете это делать? Вызывать для каждого объекта Update в БД? Вы кучу времени потратите на передачу команд в базу. Проще сформировать batch и отправить его. А это, как раз, то самое "процедурное". Потому что вы опять какую-то чушь несусветную несёте. Я нихрена не понял, что вы написали. Какой-то сферический сервер в вакууме. Где ТЗ? Как говорится, без ТЗ - результат ХЗ.
SadKo, А чего непонятного, ТЗ прозрачно и ясно. Я хочу увидеть ту часть кода твоего сервака(и предоставлю свой тоже) который просто принимает соединения. Больше мне не нужно. Что тут неясного? По второму, я хочу увидеть как ты получаешь RecordSet и как ты с этим рекордсет работаешь. Сразу станет ясно какой ты программист(кстати не исключено даже лучше чем я, это мы посмотрим.) Слова ничего не значат, а код сразу покажет кто есть кто. Что из этого ТЗ тебе не ясно? Или ты хотел смешать сначала меня с грязью а потом эдак слить по-тихому? Спрашивай, что не понятно из ТЗ я растолкую. Что тебе не ясно?
Дополнение такое, создаем сериализумый класс, который и пересылаем между клиентом и сервером. Скажем соединились тысячи пользователей и послали по тысяче(или меньше) этих сериализовываемых обхектов. Сервер их подхватывает и скажем отображает проперти String name; которое находится в этом объекте. Либо просто сервер удостоверяется что получил объект и дропает его, выводя в консоли что он сделал. Что касается второго задания, тут либо мы используем базу данных файловую типа Sqlight, это удобно, так как эта база в одном файле, либо если не нравится делаем заглушку как будто у базы данных мы получили инфу в RecordSet'e.
Сервер, который пишется только ради того, чтобы принимать соединения, - это не сервер, это какое-то сферическое непонятно что в вакууме. Для того, чтобы принять соединение, достаточно всего лишь сделать accept() на сокете. Вы хотите увидеть accept() на сокете от меня или решение какой-то конкретной задачи? Какая задача ставится для того, чтобы работать с RecordSet? При одних условиях принцип работы один, при других - радикально другой. Неясен контекст, задачи, а поэтому решение неясно. Если вы этого не можете понять, то увы и ах. И вообще, я подумал вот что. Почему я должен играть только по вашим правилам? Тогда уж баш на баш. Я вам тоже кидаю две задачи с олимпиады для девятиклассников, а потом сравниваем решение ваше и моё. Ну и прогоняем стресс-тест на производительность.
SadKo, Если бы речь шла об олимпиадных задачах, то мы были в другом месте. Нет я не согласен. Ты заявил, что знаешь больше моего об архитектури посему lets put your money where you mouth is. Когда будем спорить об олимпиадных задачах, тогда и поглядим. Так твой сервер, будет просто accept()? У тебя и меня уже так я понимаю наработки, по recordset как ты обрабатываешь, и recordset как я обрабатываю, вот и давай поделимся кодом. А олимпиадные задачи это на другом сайте обсудим. Либо придется считать, что ты включил обратку. Чего ты боишься показать часть своего кода честному народу? Ну ничего страшного возможно я чему-то научусь а возможно я покажу тебе кое-что из техники как принимать(как вариант) коннекты тысячи клиентов. Мы только выиграем от этого. Ежели ты не согласен показать данный код, то прошу тебя запомнить этот момент и больше в разговорах со мноей не поднимать вопрос о том понимаю я архитектуру или нет. Договорились?