Programmers always write software for a specific field. For example, accounting software relies on accounting rules, and a website for watching TV shows relies on TV industry concepts such as seasons or episodes. The same goes for other fields: booking flights and hotels, finding tours, buying and selling cars.
Understanding the domain for which you're writing a program is just as important as being able to program. Fields can be complex, like accounting or engineering manufacturing. You do not need to know it thoroughly, but a general understanding is still required.
Let's look at Hexlet since you know its key concepts — courses, lessons, professions, tests, code reviews, quizzes, course participants, and projects. There are two hundred entities — concepts in the code on Hexlet.
Entities are often in relationships with one another:
- Professions consist of courses
- Courses consist of lessons
- Lessons consist of theory blocks, quizzes, and exercises
- Quizzes aggregate questions
- Questions obtain answers
These connections have specific names:
- One-to-many or o2m — one lesson can have one course, but one course contains many lessons
- Many-to-many or m2m — many users can take one course, and one user can take many courses
- One-to-one or o2o — it is how users and experts connect on Hexlet
In reality, everything is still a little more complicated because the same entity may look completely different from the point of view of various systems. The users are two separate things from the point of view of accountants and mentors.
The descriptions of the objects belonging to the domain under consideration and their connections are domain ontology.
The ontology is well-known by experts in the relevant field — for example, accountants, professors, and lawyers. They often present it intuitively and informally, so we can communicate with them to build a formal ontology.
This process occurs throughout the development of the project and beyond separate stages. In creating the ontology, we identify specific terms and agree:
- What they mean
- How they are related
We can form the data model using the ER model in high-level conceptual database design. The architecture for future applications starts to appear at this stage.
It is not always possible to unambiguously say what connection exists between two entities. We can think ahead and immediately create more complex cases — for example, m2m rather than o2m, which affects the complexity of the code.
More complex connectivity means more code lines and higher development and maintenance costs. The complexity of the connections can be described as follows, in order of complexity: o2o, o2m, m2m. Someone can make mistakes when choosing a connector, which indicates a lack of understanding of the topic.
Let us give you an example. Suppose we implement a user and a foreign passport association in the system:
- Intuitively, these concepts have a one-to-one relationship: a user can have a foreign passport
- But you can change the passport if it gets lost or expires
- In addition, some countries allow you to have more than one foreign passport
On the other hand, the real world is always more complex and more complete than any model. Programmers create a universal and comprehensive model of a particular domain and try to understand the needs of a business, identify only significant parts of the field under consideration, and transfer them to the code.
How entities appear in code varies between languages:
- Some define types using abstract data types, interfaces, or classes
- Others define structures
- Others don't provide options except for dictionaries and associative arrays
From the next lesson, we'll start studying various subject areas and build suitable data models:
The most significant topic will emerge when we begin to study OOP and ORM. You can have a general idea of subject areas, entities, and relationships. Remember to read the information in the links provided — the more questions you have at this stage, the better.
Recommended materials
Are there any more questions? Ask them in the Discussion section.
The Hexlet support team or other students will answer you.
For full access to the course you need a professional subscription.
A professional subscription will give you full access to all Hexlet courses, projects and lifetime access to the theory of lessons learned. You can cancel your subscription at any time.