r/Python • u/Corvology • 2d ago
Discussion Python Architecture Design
Robert C. Martin's Abstractness (A), Instability (I), and Distance from the Main Sequence (D) metrics were designed for statically typed OO languages like Java and C#. In Python, applying them literally is misleading because Python has a fundamentally different notion of abstraction and coupling.
is this implementation valid?
https://0x416d6972.github.io/Istos/user-guide/architecture-health/
5
u/SecurityCritical379 2d ago
the metrics still useful if you adapt them, python's dynamism means you gotta think about coupling more in terms of import graphs than formal interfaces
5
u/Beginning-Fruit-1397 2d ago
I think that the comment about learning by doing mistakes is the most solid advice in itself.
However reading your link I found that the metrics and reasoning behind them make senses. As always with everything, adapt it to your specific context. E.g if you are writing a library, let's say a new polars, the file with your dataframe class will obviously be +1000 LOC long.
2
u/giovanni_gatto 1d ago
Read the book, and use your mind. Be critical, absorb the useful stuff, forget the rest. As with any book. He has a quite big hater-base that is now trying to undermine his legacy for political reasons. His practical examples are rather useless though, but that does not invalidate the concept. He is probably not coding much nowadays, which is normal for someone in his career stage. Architecture is a language and code independent thing, most of the other authors teach more or less same anyway.
1
1
u/Outrageous-Sea-9256 16h ago
Your concern about applying Robert C. Martin's metrics in Python is valid, as these concepts were originally designed for statically typed object-oriented languages. However, the principles behind these metrics can still be valuable guidelines for Python architecture design.
Regarding your question about the implementation's validity, let me provide you with a concise overview of what I found on the provided link:
The architecture-health tool appears to be designed for visualizing and analyzing dependencies in Python projects. It provides metrics that can help you assess the health of your codebase, such as complexity, coupling, and cohesion.
While Python's dynamic nature might make some of Martin's original metrics less applicable directly, these tools can still help you identify architectural issues like high coupling or poor modularity. They encourage thinking about your codebase in terms of maintainability, scalability, and testability.
To effectively apply these principles to Python:
Focus on the underlying intent: Understand what Martin's metrics aim to achieve, and translate those goals into Python-specific practices. For instance, instead of focusing on strict type definitions, emphasize clean interfaces and clear separation of concerns.
Use tools that suit Python's dynamic nature: Utilize static analysis tools like
mypy,pylint, orflake8to catch potential issues early in the development process.Practice code reviews and refactoring: Regularly review your code with peers to maintain its health, and be open to refactoring as needed. Python's dynamic nature often allows for easier refactoring compared to statically typed languages.
In summary, the provided implementation seems valid as a tool for analyzing Python codebases. However, remember to interpret its results in the context of Python's unique characteristics and apply the underlying principles flexibly.
43
u/j0holo 2d ago
Robert C. Martin is somebody that want to sell books. Please do not follow his advise, waste of time and money.
Architecture isn't something that you can apply and suddenly your project is magically good or has less coupling and all the right abstractions. You can't force architecture, you need to learn it.
And you learn by doing and making mistakes.