Когда проект только начинается не особо мешает небрежность в организации кода, модулей, процедур. Но чем старше проект, тем больше наслаиваются правки друг на друга.
С каждой новой правкой проект усложняется и при беспорядочном способе организации кода. В итоге в проекте будет все сложнее понять что где находится.
Здесь приведены советы, как с этим бороться.
Так будет проще понять, что выдается на выход наша процедура и сложнее перепутать выходные select с присвоением переменных через SELECT.
Типовые действия необходимо прописывать один раз в некой функции и процедуре, и затем вызывать ее там, где требуется.
Примеры для функций - проверки доступа, вывод дат или метрик (форматирование вывода).
Примеры для процедур - создание заказа, логирование каких-то операций.
Если этого не делать, то у вас будет в итоге много дублирующего кода. К примеру, создание заказа может в будущем проходить по API и лучше и на форме и в методе API использовать 1 хранимую процедуру (например, srv_createOrder).
Если чувствуете, что параметров у процедуры может быть в будущем больше, то проще в нее передавать @parameters ExtendedDictionaryParameter.
В SELECT запросы, если идет JOIN, то всегда используйте псевдонимы для таблиц и поля используйте с псевдонимами.
Это нужно чтобы безопасно можно было добавлять потом поля в таблицу БД.
К примеру у заказа есть поле ord и идет JOIN с категориями. И мы заказы вывели на таблице. В будущем, если кто-то добавит ord у категорий, то запрос SELECT упадет (т.к. поле ord есть у обоих таблиц). Поэтому сразу прописывайте в JOIN псевдонимы таблицы (например, prod и cat) + обращаемся к полем через и эти имена (select prod.ord...).
У каждого компонента процедуры имеют свою структуру. Лучше минимально отходить от шаблона процедур - в этом случае их проще читать и понимать, проще поддерживать.
Всегда придерживаться 1 нотации в проекте (какая уже есть в проекте).
Нужно всегда отталиваться от той нотации, что использована в проекте. Имена таблиц, полей, хранимых процедур и функций.
В идеале добиться, чтобы нельзя по стилю именования было понять кто создавал объекты.
Чем все более типовое для проекта - тем проще это понимать в будущем.
Не нужно писать большие портянки в процедурах day, hour и т.д.
Выносите их в отдельные процедуры с понятным названием - тогда код процедур day, hour будет компактным.
В этом случае гораздо проще понять, что выполняется в периодических процедурах, а также выключать какие-то возможности комментированием 1 строки, а не целой большой портянки.
Стили, скрипты для 1 страницы лучше размещать не в глобальным CommonStyles, CommonScripts, а прямо на этой странице.
Не нужно засорять глобальные JS и CSS моментами, которые относятся к 1-2 страницам (как вариант, можно вынести в отдельный файл css или JS и его подключить к нужным страницам).
Попробуйте обойтись без кастом стилей (используя стандартные классы Bootstrap) и JS-коллбеки размещать у формы в отдельном специальном поле.
В отдельных случаях можно обойтись и без JS через использование Actions и RefreshContainer.
Чем больше кастом CSS и JS, тем сложнее будет поддержка проекта, и тем больше в нем будет нестабильности, нюансов и т.д.
Если идет совсем жесткий кастом системных элементов или глобальных элементов на страницах, то есть риск, что это может в будущем конфликтовать с обновлением ядра. Лучше минимально трогать системные элементы платформы.
Исходите из принципа, что можно только наращивать струткуру БД, а не менять ее по ходу эксплуатации.
Не меняйте типы существующих полей и не удаляйте поля.
Если вы удаляете поле, то это может сказаться на каких-то существующих запросах в системе (и это может выясниться не сразу).
Чем лучше вы предскажете дальнейшее развитие системы, тем меньше вам надо будет переделывать по структуре БД и ниже риски нестабильности.
Если у вас есть есть сомнения что отношение один ко многим может быть все же пересмотрено в сторону много-ко-многим, то сразу делайте много-ко-многим (т.е. с промежуточной таблицей).
Также тип полей таблиц указывайте с учетом возможных пожеланий по расширению.
Пример: Если у задач хотят внедрить приоритет, то возможно сразу имеет есть сделать числом а не bit, т.к. приоритетнось может быть несколько уровней.
Чем более стандартные имена, тем проще писать SQL код. Имена должны быть ожидаемые. Разработчик не должен постоянно проверять, как называются поля в таблице.
Примеры стандартных имен:
Чем меньше вычурных имен и неожиданных моментов - тем проще будет это использовать и поддеживать.
Не нужно в имени дублировать сущность (например, вместо name использовать productName). Также не нужно указывать на тип (венгерская нотация) - strName.
Не нужно экспериментировать на рабочем сайте с ключами.
У таблицы ставим всегда id primary key identity (1,1).
Внешние ключи делаем всегда int и наименование вида categoryID (т.е. это ссылка на категорию).
Много-ко-многим делаем через отдельную таблицу, где 2 внешних ключа на другие таблицы (например, productID, categoryID в таблице as_cat_productCategories).
Отклоняться от этих правил стоит только в угоду оптимизации большой таблицы (например, guid в качестве primary key).
В корне лежат несколько важных файлов, и лучше их не смешивать с множеством других файлов.
Создавайте папки и в них помещайте необходимые файлы.
Если не удалять временные файлы, то папка uploads разрастется, что усложнит создание бекапов. Если файлы после операции не нужны, то лучше их удалить.
ВАЖНО. Не делайте сложные выборки для удаления, чтобы не удалить ничего лишнего по ошибке. Логика удаления должна быть максимально простой, чтобы уменьшить риск потери ценных данных из-за логической ошибке в коде.
См. также - Заметки по ревизии кода, как улучшить свой код