Java
javaTutorial
How to distinguish between business logic and storage logic in back-end development?
How to distinguish between business logic and storage logic in back-end development?

Back-end three-layer architecture: the boundary between business logic and data access logic
In back-end development, the common three-layer architectures of controller, service and dao are relatively clear in the controller and service layers. They are mainly implemented by separating business logic and presentation logic, such as decoupling message queue (MQ), HTTP, RPC, etc. from business logic. However, the boundary between the service layer and the dao layer, especially after the introduction of the manager layer, often confuses developers.
In Python back-end development, business logic is sometimes mixed in the model layer, such as business query methods such as usermodel.is_super() , or native database operations such as usermodel.objects.all() , and even cross-table operations such as usermodel.** .
Analysis of business logic and non-business logic
The key to business logic and non-business logic lies in whether it directly relates to customer needs. Logic that customers cannot perceive is often considered non-business logic, including:
-
Database structure and association relationship: For example,
usermanager.delete()anddepartmentmanager.delete()methods can handle the deletion of the association table (such asuserdeptmodel) at the same time, without calling the dao layer method twice at the service layer. Even without a manager layer, the dao layer can perform such association or cross-table operations as long as these operations are independent of business logic.class UserManager: def delete(self): userdao.delete() userdeptdao.delete() class DepartmentManager: def delete(self): departmentdao.delete() userdeptdao.delete() -
Password salt: Users only need to know that the password is not stored in plain text, and the salt addition operation can be processed in the dao or manager layer.
class UserDao: def make_password(self, passwd): return salt(passwd) # add salt function def save(self): self.passwd = self.make_password(self.passwd) super().save() Naming and definition of dao layer method: Naming dao layer method, for example, whether semantic names such as
get_super_userare suitable depends on whether they are related to business logic. Ifsuperis not business-related, it is acceptable to useget_super_user.HTTP request encapsulation: Backend dependencies (such as services provided by other teams) can be encapsulated into dao-layer methods, rather than service-layer methods.
Implement functions similar to Django filter in Django/Flask
When implementing Django filter-like functions in Django and Flask, you often encounter layer-by-layer penetration problems because the dao layer needs to pass in request parameters. In the absence of a dependency injection framework like Spring, you can consider:
- In Java, frameworks such as MyBatis or JPA are usually used to manage data access and filtering logic through annotations and configuration files.
The relationship between data entities and three-layer architecture
Data entities represent data objects in the system. In a three-layer architecture, controller, service and dao layers do not strictly correspond to one by one:
- The dao layer may contain multiple methods to process different data entities, such as
userdaoanddepartmentdao. - The service layer may need to combine multiple dao layer methods to implement complete business logic.
In short, the dao layer is only responsible for data storage interaction and does not include business logic; the service layer is responsible for executing business logic. For example, when creating a user, the service layer checks whether the user name is duplicated, and then calls the dao layer method to save the user. This architecture is designed to divide the system by responsibility and improve the maintainability and scalability of the code.
The above is the detailed content of How to distinguish between business logic and storage logic in back-end development?. For more information, please follow other related articles on the PHP Chinese website!
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
What are class methods in Python
Aug 21, 2025 am 04:12 AM
ClassmethodsinPythonareboundtotheclassandnottoinstances,allowingthemtobecalledwithoutcreatinganobject.1.Theyaredefinedusingthe@classmethoddecoratorandtakeclsasthefirstparameter,referringtotheclassitself.2.Theycanaccessclassvariablesandarecommonlyused
python asyncio queue example
Aug 21, 2025 am 02:13 AM
asyncio.Queue is a queue tool for secure communication between asynchronous tasks. 1. The producer adds data through awaitqueue.put(item), and the consumer uses awaitqueue.get() to obtain data; 2. For each item you process, you need to call queue.task_done() to wait for queue.join() to complete all tasks; 3. Use None as the end signal to notify the consumer to stop; 4. When multiple consumers, multiple end signals need to be sent or all tasks have been processed before canceling the task; 5. The queue supports setting maxsize limit capacity, put and get operations automatically suspend and do not block the event loop, and the program finally passes Canc
How to run a Python script and see the output in a separate panel in Sublime Text?
Aug 17, 2025 am 06:06 AM
ToseePythonoutputinaseparatepanelinSublimeText,usethebuilt-inbuildsystembysavingyourfilewitha.pyextensionandpressingCtrl B(orCmd B).2.EnsurethecorrectbuildsystemisselectedbygoingtoTools→BuildSystem→Pythonandconfirming"Python"ischecked.3.Ifn
How to use regular expressions with the re module in Python?
Aug 22, 2025 am 07:07 AM
Regular expressions are implemented in Python through the re module for searching, matching and manipulating strings. 1. Use re.search() to find the first match in the entire string, re.match() only matches at the beginning of the string; 2. Use brackets() to capture the matching subgroups, which can be named to improve readability; 3. re.findall() returns all non-overlapping matches, and re.finditer() returns the iterator of the matching object; 4. re.sub() replaces the matching text and supports dynamic function replacement; 5. Common patterns include \d, \w, \s, etc., you can use re.IGNORECASE, re.MULTILINE, re.DOTALL, re
How to build and run Python in Sublime Text?
Aug 22, 2025 pm 03:37 PM
EnsurePythonisinstalledbyrunningpython--versionorpython3--versionintheterminal;ifnotinstalled,downloadfrompython.organdaddtoPATH.2.InSublimeText,gotoTools>BuildSystem>NewBuildSystem,replacecontentwith{"cmd":["python","-
How to use variables and data types in Python
Aug 20, 2025 am 02:07 AM
VariablesinPythonarecreatedbyassigningavalueusingthe=operator,anddatatypessuchasint,float,str,bool,andNoneTypedefinethekindofdatabeingstored,withPythonbeingdynamicallytypedsotypecheckingoccursatruntimeusingtype(),andwhilevariablescanbereassignedtodif
How to pass command-line arguments to a script in Python
Aug 20, 2025 pm 01:50 PM
Usesys.argvforsimpleargumentaccess,whereargumentsaremanuallyhandledandnoautomaticvalidationorhelpisprovided.2.Useargparseforrobustinterfaces,asitsupportsautomatichelp,typechecking,optionalarguments,anddefaultvalues.3.argparseisrecommendedforcomplexsc
How to debug a remote Python application in VSCode
Aug 30, 2025 am 06:17 AM
To debug a remote Python application, you need to use debugpy and configure port forwarding and path mapping: First, install debugpy on the remote machine and modify the code to listen to port 5678, forward the remote port to the local area through the SSH tunnel, then configure "AttachtoRemotePython" in VSCode's launch.json and correctly set the localRoot and remoteRoot path mappings. Finally, start the application and connect to the debugger to realize remote breakpoint debugging, variable checking and code stepping. The entire process depends on debugpy, secure port forwarding and precise path matching.


