Software that use Component Based Architecture

Started by
15 comments, last by Buster2000 8 years, 2 months ago


Haha, yes, do you mean like I mention in the second sentence of my original post?

The point is that if you include things like Javabeans and COM, you've covered about 90% of commercial software written between 1998 and 2010.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Advertisement

Please don't use that tone with me (bold, exclamation marks). Yes, when used by a moderator towards a user its 'emphasis' but, ofcourse, when used by a user towards another moderator it certainly wouldn't be.

No offense intended.
Mod title basically means I delete spam bots and move misplaced advertising into "Your announcements" -- not that my opinions carry more weight. The "staff" title is the one to watch out for. I hear that they're basically Hitler wink.png

Component based architecture is a concrete architecture

That's arguable. As Sean said above - this is more of "A solution in search of a problem" or the programming form of paint by numbers - "design by patterns". All software should be component based to a degree - as the attributes that make something "component based" are now standard design principles (but not so much in the 60's when the term "component based" was coined -- e.g. back then it wasn't assumed that everyone would generally follow SOLID principles, as they hadn't even been formalized yet).
Strict inter-language communication models (like COM) are used whenever an architecture must span multiple languages or processes. Even bulkier frameworks/models are used when an architecture must span multiple different computers. Going back to the 60's when this was invented, stuff like HTTP and HTML would've been really novel, groundbreaking ideas. Now we just take for granted that we can standardize a communications protocol to allow different code modules to come together to create a functional application.
If you're confined to one language and once process (like most games), there's no need for something like COM because "component based" design features are now built into our languages as standard. We write component based code daily without needing to even think about it.

[edit]

Maybe you're referring to these kinds of frameworks, which define a strict specification for component communication above and beyond the standard feature set of any one particular language?

Haha, yes, do you mean like I mention in the second sentence of my original post?

What applications/software products use Component Based Architecture (or its *variants)? Obviously its very common in game engines and games and I'm aware of Javabeans, COM using it.

What I was getting at is that there's a difference between asking about applications that are based on components (almost everything), and asking about applications that are built on top of specific frameworks like COM. In your first post you used COM as an example of something based on components (the former category), so I was asking if you were more interested in the latter category.



Haha, yes, do you mean like I mention in the second sentence of my original post?

The point is that if you include things like Javabeans and COM, you've covered about 90% of commercial software written between 1998 and 2010.

Source?


Source?

I don't have one. There probably isn't an official source on such things.

But it's hard to find an enterprise Java application from that period that doesn't use Javabeans in some capacity, and all the relevant features of Javabeans are now included in the Java standard library. COM is used by literally every Windows application of any note - for example, DirectX is a COM API, as is the Windows Shell (desktop environment), and ActiveX. The core concepts from COM are included in .NET these days.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Yes, it's not clear. OpenCV is a concrete thing, a particular library.
Component based is a nebulous adjective that can be used to describe an endless number of different software designs -- in fact, almost every modern software design!


Please don't use that tone with me (bold, exclamation marks). Yes, when used by a moderator towards a user its 'emphasis' but, ofcourse, when used by a user towards another moderator it certainly wouldn't be.

The moderators here are decent people and legitimate members of the community, and users (including myself) argue with them all the time, bolding, underlining, italicizing, shebanging, and asterisking the crap out of them.

We have very very heated - but friendly - debates. As long as it doesn't devolve to personal attacks, intelligent discussions (even passionate ones) are encouraged.

Which of the twenty different ""pure"" forms are you referring to?


Leave it up to us C++ devs to overthink a simple question and veer off on a completely different tangent.

laugh.png fair enough. I'm not trying to veer off on any tangent, just pointing out (through implication) that your question is alot broader to interpretation than you might suspect (at least for me).

Perhaps that's just because, as a C++ dev, I like all my forward-declarations to be properly defined when it comes time to use them. tongue.png

If I were to ask 'What well known software products/applications use OpenCV?'; an answer is 'Tesla's driving software heavily relies on it'. Cue the counter argument that the op question is not clear enough, thus, requires defining what someone means by 'pure', 'well-known', 'CBA', 'the', 'I' and etc. An then we find us.... on a tangent.


Well, I want to know what you mean by "CBA" and "pure", because it's an overly-broad term that various people interpret differently.

I wasn't sure if you mistakenly meant ECS (which is a form of CBD, which inherits ideologically from CBA), which is the gamedev flavor of the past year or two, or whether you were referring to platforms like OpenDoc.

To some extent, you could even consider things like batch files and pipelining to be 'component based', if you consider the different bite-sized command-line tools to be components (both OpenDoc-style CBA and command-line pipelining are different ways to attempt to solve the software crisis by breaking code chunks into pluggable components). Even more abstract, applications themselves are "components" sitting on the OS platform that the user combines to get work done via saving files or transferring MIME data between two seperate programs via drag-and-drop or copy+paste.

For example, I'm not seeing why ATM software in-specific would be better suited to CBA than another project, so I must be missing what you are focusing on within CBA.

[Edit:] Crap, the wikipedia page for CBA mentions both OpenDoc and CL pipe-lining. I thought I was being clever by using those as examples. laugh.png

[Edit 2:] Bleh, since we're all saying the same thing, I don't want to dogpile on, so I'll bow out of the discussion since the others have actual enterprise-software experience.


Source?

I don't have one. There probably isn't an official source on such things.

But it's hard to find an enterprise Java application from that period that doesn't use Javabeans in some capacity, and all the relevant features of Javabeans are now included in the Java standard library. COM is used by literally every Windows application of any note - for example, DirectX is a COM API, as is the Windows Shell (desktop environment), and ActiveX. The core concepts from COM are included in .NET these days.

I'd also give a very high ad-hoc estimate. I'd give much higher than 90%.

All Java-language business software I've seen or worked with makes extensive use of beans. Even very small projects based on toolkits like Spring rely heavily on beans because the toolkits rely on them. Database engines similarly are modular components.

When it comes to Windows-based apps, I'm not aware of any window-management or form-management UI system that is not designed around modular components. Database access again is modular with components and standardized interfaces. Everything networked is based around component-ized modules and frameworks.

Every library I can think of off the top of my head uses component-based designs. Even things like language standard libraries rely heavily on components-based designs.

Even the C++ language itself, the 'virtual' keyword and functionality was built to provide a common built-in way to provide common interfaces to modular objects. Before that in the 1960s and 1970s nearly every program would use a structure with function pointers to accomplish exactly the same component-based swapping of parts.

About the only thing I've seen in the past few decades that DOESN'T follow component-based architectures are the tiny little 'hello world' learning programs, or quick-and-dirty five-line scripts that don't touch any major libraries.



Haha, yes, do you mean like I mention in the second sentence of my original post?

The point is that if you include things like Javabeans and COM, you've covered about 90% of commercial software written between 1998 and 2010.

Source?

I can't provide a source but, I can speak from experience. The majority of software written and the majority of development jobs do not produce "programs" that are used by joe public. The majority of software written is in large on going systems that used internally and are usually in development for the lifetime of the company (think banking software, insurance software, oil exploration software, stock trading software, air traffic software). I have worked on banking and finance software and can tell you that they absolutely use component based architecture in some modules.
Further almost any large piece of software that has been written in Java in the last 15 years is likely to have at least a little CBA simply because composition was embraced very early within the Java community and a lot of beginner Java programming books teach composition over inheritence.

Now that being said your original post asked for "well known" examples. The problem is without access to the source code we can only make assumptions about how this software was designed. So we are left with open sourced software. I use a lot of open source software but, I very rarely crack open the source code. I do however recall reading a white paper a long time ago about GIMP using a component based architecture.

This topic is closed to new replies.

Advertisement