Оригинальное название статьи: «The * stupidest things I’ve done in my programming job», поэтому перевод названия статьи не очень точен, однако то, что автор имел ввиду под "*" мы опустим — мы ведь не знаем наверняка :)
Я больше не стыжусь своих грешков, так что — вперед:
Создал собственную ORM (Object Relational Mapping) библиотеку
Неразбериха в проекте после двух лет поддержки, в следствие хаков-обходов моей ORM библиотеки для запуска прямых SQL запросов
Использовать Hibernate, iBATIS, Cayenne или нечто подобное.
Использование модели Entity-attribute-value
Отсутствие масштабируемости (scalability) и полная невозможность запускать нужные запросы на уровне базы данных.
Использовать процедуру нормализации БД.
Последовательный доступ к базе данных с использованием одного общего соединения для всех пользователей.
Нулевая масштабируемость. Очень большое время отклика для 10 и более пользователей, работающих с приложением.
Не делать этого и использовать пул соединений. Например c3p0, чтобы повторно использовать соединения.
Избегал IDE (Integrated development environment), отказывался изучать и использовать
Невозможность быстро строить, тестировать и развертывать (deploy) приложения.
Изучать IDE: NetBeans, Eclipseт.д.
Не использовал вообще.
Поврежденные данные в приложениях, в том числе повреждение функциональности.
Использовать транзакции
Использование Statement, конкатенация строк и наивные преобразования запросов в «безопасные».
Возможны SQL инъекции.
Использовать Prepared Statements, составление валидного запроса в зависимости от драйвера JDBC, который используется в приложении.
Вся логика заключена в шаблоне вывода (JSP).
Беспорядочный код, неудобный для сопровождения
Использовать шаблон MVC или Front Controller. Ещё лучше использовать MVC в рамках таких open-source продуктов как Struts, Spring MVC, других.
Я больше не стыжусь своих грешков, так что — вперед:
1. ORM
Глупость
Создал собственную ORM (Object Relational Mapping) библиотеку
Следствие
Неразбериха в проекте после двух лет поддержки, в следствие хаков-обходов моей ORM библиотеки для запуска прямых SQL запросов
Что я должен был сделать
Использовать Hibernate, iBATIS, Cayenne или нечто подобное.
2. EAV
Глупость
Использование модели Entity-attribute-value
Следствие
Отсутствие масштабируемости (scalability) и полная невозможность запускать нужные запросы на уровне базы данных.
Что я должен был сделать
Использовать процедуру нормализации БД.
3. Database Access
Глупость
Последовательный доступ к базе данных с использованием одного общего соединения для всех пользователей.
Следствие
Нулевая масштабируемость. Очень большое время отклика для 10 и более пользователей, работающих с приложением.
Что я должен был сделать
Не делать этого и использовать пул соединений. Например c3p0, чтобы повторно использовать соединения.
4. IDE
Глупость
Избегал IDE (Integrated development environment), отказывался изучать и использовать
Следствие
Невозможность быстро строить, тестировать и развертывать (deploy) приложения.
Что я должен был сделать
Изучать IDE: NetBeans, Eclipseт.д.
5. Транзакции
Глупость
Не использовал вообще.
Следствие
Поврежденные данные в приложениях, в том числе повреждение функциональности.
Что я должен был сделать
Использовать транзакции
6. Prepared Statements
Глупость
Использование Statement, конкатенация строк и наивные преобразования запросов в «безопасные».
Следствие
Возможны SQL инъекции.
Что я должен был сделать
Использовать Prepared Statements, составление валидного запроса в зависимости от драйвера JDBC, который используется в приложении.
7. Бизнес-логика
Глупость
Вся логика заключена в шаблоне вывода (JSP).
Следствие
Беспорядочный код, неудобный для сопровождения
Что я должен был сделать
Использовать шаблон MVC или Front Controller. Ещё лучше использовать MVC в рамках таких open-source продуктов как Struts, Spring MVC, других.