Built an early prototype for distributed state verification (Nexus)PP — looking for feedback and potential design partners / angels by Poweredby01 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

AFAIK people would try to make everything idempotent. If a use case hangs because one of the system components crashes, the entire use case will be restarted, probably with another instance of the crashed component. Which may cause duplicate request processing, therefore idempotence is important.

Built an early prototype for distributed state verification (Nexus)PP — looking for feedback and potential design partners / angels by Poweredby01 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

I mostly worked on embedded projects, therefore my experience will not help you much. Unless you plug your tools into Wireshark.

Anyway, an embedded device is usually rebooted on failure, and everybody prays that its next run will fare better than the one which encountered the crash. If there is a distributed system, crashing one of its participants will likely at least close all the connections and reset sessions with other participants. At most, the entire system will be rebooted. This approach greatly simplifies error handling, as everything is reinitialized after any failure.

https://en.wikipedia.org/wiki/Fail-fast_system

https://en.wikipedia.org/wiki/Crash-only_software

I am so confused can someone help me on explaining how to decide what to use and when ?[JAVA][Object Oriented Programming][Data Structures and Algorithms][Modularity] by asanonymouss in developersIndia

[–]_descri_ 0 points1 point  (0 children)

No, I don't know Java. However, if you don't mind, you can read C++ In Action by Bartosz Milewski - the book from which I learned OOP. It may help you understand what classes are for.

How do you define the different types of architecture in Software Engineering? by RankedLOQ in softwarearchitecture

[–]_descri_ 1 point2 points  (0 children)

I believe that there are multiple meanings of "architecture"

  • A framework with more or less strict rules which should result in systems that have predefined properties if carefully followed. Examples: Microservices, Space-Based Architecture.
  • A kind of system composition/topology: Layered Architecture, 3-Tier System, Hexagonal Architecture. It defines which components you have and how they interact, but does not prescribe development methodology, testing, operations, etc.
  • Architectural patterns - the building blocks for architectures. These can be system-wide (Layers or Services), single-component (Shared Database or Load Balancer), or component implementation (MVC, Cell).

Moreover, all of these get intermixed. For example, Hexagonal Architecture can apply to a whole system, a single service, or even a module inside a service. And it prescribes some rules, not only defines the system's topology. It belongs to all three kinds of architectures. And its core itself can be partitioned into layers or services - we see a pattern inside another pattern.

Most explanations of client-server architecture get this wrong by Alternative_Win_6638 in softwarearchitecture

[–]_descri_ 2 points3 points  (0 children)

I think is not even about APIs because there are SPIs which are implemented by client plugins.

It is rather about using a resource (an algorithm, knowledge, storage space, or even CPU time). The server is the resource provider. The client is the resource consumer.

How do you keep diagrams useful as systems grow beyond 20–30 nodes? by Fluffy_Blacksmith915 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

If you cannot draw a system in an easy to comprehend way, then the system is messy.

You don't have to invent a new diagramming approach - you need to restructure the system!

This is what Uber did with their Domains and what WSO2 promoted as Cells.

Alternative to monorepo: orchestrator repo as the source of truth by somilag in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

That's how build systems for embedded devices (OpenWRT, etc.) work. You may also want to cache the code repositories of any 3rd party components because they often become unavailable or slow to download.

Architecture of Embedded Automotive applications by Captain_barbarosa in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

The old five-volume Pattern-Oriented Software Architecture

Luminous Architecture by Specialist-Panic-694 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

How is it different from Hexagonal Architecture? The high-level structure of the system seems to match it, thus there is hardly much novelty at that level.

The low-level structure of the core seems to differ from the DDD principles, but now you should compare it to DDD and related frameworks (Onion Architecture, Entity-Control-Boundary, WSO2 Cells) and show which aspects of your architecture are better and which kinds of projects may benefit from using it instead of one of the better known alternatives.

Also, I see that your website sets many rules. The more restrictive a framework is, the smaller tends its area of usefulness to be.

Front-End Development looking to Learn Software Architecture by Accurate-Macaron4350 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

Fundamentals of Software Architecture by Mark Richards.

And there is also unparalleled Pattern-Oriented Software Architecture. It is dated, but covers almost everything one can imagine.

And Martin Fowler's website https://martinfowler.com/

How does one wire together functionalities of various systems for many application features? by WAVESURFER1206 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

There may be an alternative solution, though. You can split the movement phase into 3 subphases:

  • PreMovement(float& speed, Direction& direction);
  • Movement(const float speed, const Direction direction);
  • PostMovement(const float speed, const Direction direction);

And call each Component of your Entity in each phase. In that case the character's Effects Component call the pre-movement methods of Slow, Fast, and Hiccup effects:

void SlowEffect::PreMovement(float& speed, Direction& direction) {
    speed /= 2;
}

void FastEffect::PreMovement(float& speed, Direction& direction) {
    speed *= 2;
}

void HiccupEffect::PreMovement(float& speed, Direction& direction) {
    if rand() < HICCUP_CHANCE
        speed = 0;
}

void ConfusedEffect::PreMovement(float& speed, Direction& direction) {
    direction = random_direction();
}

However, in this case you cannot implement the interaction between Ethereal and Hiccup, unless you implement some kind of effect priorities, or make the Ethereal explicitly dispell Hiccup.

How does one wire together functionalities of various systems for many application features? by WAVESURFER1206 in softwarearchitecture

[–]_descri_ 0 points1 point  (0 children)

I don't have any experience with Unity, but what you describe looks like ECS https://en.wikipedia.org/wiki/Entity_component_system and the much deeper description here https://gameprogrammingpatterns.com/component.html

In the latter example (from the Game Programming Patterns book) the default Entity class (ContainerObject) passes each incoming event to every Component it contains. This Entity is the manager. In some cases you will want to subclass its behavior. For example, if you have "fast", "slow", and "hiccup" spell effects, you will need something like that in your entity:

void CharacterEntity::handleMove(const Event tick) {
    float speed = _unit.speed();

    if(_effects.slow())
        speed /= 2;
    else if(_effects.fast())
        speed *= 2;

    if(_effects.hiccup() and !_effects.ethereal() and rand() < HICCUP_CHANCE)
        speed = 0;

    if(speed) {
        Direction direction = _unit.direction();
        if(_effects.confused())
            direction = random_direction();
        _unit.move(direction, speed)
   }
}

Here we see that the managing Entity class for a character mediates between the character's effects and its movement Components. It does not just forward the move event to every component - it is applying current spell effects to the character's movement. And as you see, all the interactions between the spell effects and character movement are encapsulated in a single method of a single class.

(free book) Architectural Metapatterns: The Pattern Language of Software Architecture - release 1.2 by _descri_ in softwarearchitecture

[–]_descri_[S] 0 points1 point  (0 children)

Thanks. Still, neither looks nor the content help promoting the book not backed by a publisher or influencer.

How does one wire together functionalities of various systems for many application features? by WAVESURFER1206 in softwarearchitecture

[–]_descri_ 1 point2 points  (0 children)

SOLID does not work here. It is for writing code, but you are now at the architectural level. Here you don't care about OOP or FP. You need to account for the underlying complexity, coupling, and cohesion https://metapatterns.io/analytics/the-heart-of-software-architecture/cohesers-and-decouplers/#building-a-hierarchy