Code - gusenov/kb GitHub Wiki

Extremums

Search

Code ownership

Wikipedia

Code analysis

  • CodeQL semantic code analysis engine. CodeQL lets you query code as though it were data.

Static code analysis

  • Klocwork static code analysis and SAST tool for C, C++, C#, Java, JavaScript, Python, and Kotlin identifies software security, quality, and reliability issues helping to enforce compliance with standards.

Books

  • Write Great Code by Randall Hyde
    • Volume 1. Understanding the Machine
    • Volume 2. Thinking Low-Level, Writing High-Level
    • Volume 3. Engineering Software
  • Beautiful Code by Andy Oram, Greg Wilson - 620 pages

Search

Naming convention

Messages

  • Message Naming Conventions
    • Message
      • Commands are an instruction, telling a system to "do something". Commands can be validated, approved/rejected, processed, replied.
        • <Present-tense verb><Subject>
          • GiveBeer
            • GiveBeerResult - Commands can also have a response, or a reply, which is logically coupled to the command itself.
            • GiveBeerResponse
            • GiveBeerReply
        • <Subject><Present-tense verb> - This style is useful when our systems are subject first similar to controller actions.
          • BeerGive
        • <CommandName>Command - For scanning/serialization purposes (identify all messages as named "*Command")
          • GiveBeerCommand
      • Events on the other hand reflect an immutable fact. We can't approve/reject events in the past.
        • <Subject><Past-tense verb> - In english, it's more natural to have the verb second after the subject for past-tense, direct opposite of our commands.
          • BeerPoured
        • <Past-tense verb><Subject> - a bit more awkward than the reversed Command style
          • PouredBeer
        • <EventName>Event - can help metadata-driven systems easily identify the events in a system
          • BeerPouredEvent

CQRS

  • Stack Overflow / CQRS Naming Conventions
    • Naming should really just come out of the thing the method is doing.
    • Make sure that any given method is either querying for data or commanding that something happen. I.e. "Asking for a value should not change the value".
    • CQRS also steers you away from a CRUD application, to a task-based one where you focus more on the problem domain in terms of user interactions than just reading and saving data.
    • Queries
      • FindXYZ(), GetXYZ() or LoadXYZ - return some data, don't modify any
        • GetThing() methods cannot return null (they might throw an exception)
        • FindThing() could return null if the thing wasn't found
    • Commands
      • verb-noun - you can think in similar terms to PowerShell's cmdlet naming conventions
      • Implement commands as a CommandProcessor pattern, where commands are actually objects containing parameters (sometimes only a primary key of an entity). There is the code to look for appropriate "processors" for each command's Type.
      • If you really need a command to be async, then your command's handler might send a message to an ESB to do so.
    • I have just separated out queries into its own Project, named Domain.Read. It works with simple Repository pattern with CRUD that returns DTO's - This can be used in any RESTfull API's or internally as a DL and data can requested and transformed as needed. So the reading of data is completely isolated from Write commands and Events with Eventual Consistency.

Tags

GNU Project

C

C++

Java

Qt

KDE

SQL

.NET

Git

Microsoft Access

Code Review

Posts

  • Про форматирование by Oleg Knyazev
    • форматирование должно быть механическим
    • Правила форматирования должны быть настолько просты, чтобы их могла выполнять программа.
    • форматирование должно отражать структуру программы
    • вам не должно требоваться переформатирование при изменении кода
      • все стили в духе “висячей строки” идут лесом
      • все табличные форматирования идут лесом
    • одно из ключевых правил дизайна: размещать связанные вещи рядом, а несвязанные — поодаль
    • когда я делаю функции такими разреженными, становится сложнее искать границы между ними
    • профессионалы пишут плотный код
    • методы не должны быть большими. Что всегда можно выделить еще один метод.
    • пишите программы, а не текст! В программе у вас есть функции, классы, перечисления и всякие прочие штуки, которые поддерживает ваш язык программирования. Делайте программы из них. Не из пустых строк, комментариев и выравнивания.
    • если вы начнете работать над структурой программы, а не над текстом и будете стремится довести ее до совершества, произойдет чудо. Окажется, что пустые строки для “отделения смысловых блоков” не нужны. Табличное форматирование не нужно. Комментарии практически не нужны. И ваши функции станут маленькими и плотными
    • делайте структуру, а не форматирование. Мол, ведь логически эти функции и поле связаны! Вот именно — логически, но не структурно. Если хотите их связать структурно — выделите класс.
  • Радио-Т Подкаст 920 / Haystack - все иначе 00:54:28

LOLZ

⚠️ **GitHub.com Fallback** ⚠️