The Stack Overflow podcast is back! Listen to an interview with our new CEO.
28

If you are building a simple application with low traffic, there is something to be said about keeping another component out of your system. It is very likely that not using a message bus is the right answer for you. However, I would suggest building your system in a way you could swap out the database-based queue system for a middleware solution. I agree ...


21

The reason you're getting the concepts jumbled up is that the vendors are selling them in a package. But they are definitely separate concepts. An API Gateway provides a central access point for managing, monitoring, and securing access to your publicly exposed web services. It would also allow you to consolidate services across disparate endpoints as if ...


11

Yes, CORBA is rarely specified for new systems. But, there are plenty of live systems that you might want or need to connect to using their CORBA interface, as it was very popular from the early 1990s, for about twenty years, and live systems often last many decades. @Blrfl shared a link to The rise and fall of CORBA (Michi Henning, 2006, ACM Queue magazine)...


7

The author of the project you linked describes middleware as a "state engine" for business logic, akin to Windows Communication Foundation. That's not the usual definition for middleware (software that glues two or more heterogenous applications together), and I don't think the "middleware pattern" is really a thing. I think the author is playing a bit ...


7

A streaming app is an app that consumes a stream of data. A stream of data is transmitted data formatted in a way that can be useful even when incomplete. Since partial stream data does not require complete transmission this allows consumers to join and leave at any time. It also allows for transmission to be continuous, though it may start and stop on ...


6

Dependency Injection uses the term "dependency" correctly. A dependency is simply a setting, value, or configuration on which a program depends. Looking up dependent is much more instructive. There one finds (slightly paraphrasing and abridging, and amongst other meanings): relying on someone or something else conditioned or determined by something else; ...


6

The short: Yes, sadly(*), CORBA is outdated, as in: No decent .NET implementation The existing C++ binding is ugly, although there does exist a new C++11 binding No decent implementations for other modern languages (except Python) That being said, existing CORBA implementations like omniORB, TAO, R2CORBA are supported and used, and are IMHO much more ...


5

Every software development technique we've ever invented has been about managing complexity somehow. A huge portion of them have been and continue to be about abstraction, encapsulation and loose coupling. Microservices are yet another way of doing those things, which is probably why it resembles a lot of older techniques at a high theoretical level, but ...


4

Whether you place the "Middle Tier" code in DLLs loaded by the Front End site or place it into a separate web service application is just a detail. This placement decision does not change the code architecture in a meaningful way. It's more of a deployment decision. No, the tiers are not defined by physical deployment decisions but by code architecture and ...


4

Of course, the term middleware has changed quite a bit since this question has been posted (almost 5 years ago at the time I am writing this). While reading the recently published book, Building Microservices With ASP.NET Core (by Kevin Hoffman) I came upon this term and wanted to know more about it. That lead me to the Microsoft site which now defines it ...


4

I first came across the middleware 'pattern' in the node.js connect, and latter express, projects: it's just a clear and simple way of writing asynchronous code, where callbacks are slotted into an 'framework' API, each of which is expected to itself accept a callback parameter, which is to be executed when the routine is to return. In the context of connect,...


4

Based on what I can tell from the example, it basically allows an arbitrary set of pre-action and post-action hooks that are chained in a defined way (hence, you build the stack it goes through) on a particular initial state of an input (in this case, nil, but there's no requirement for it to be such). Their motivation appears to be in the context of HTTP ...


4

How is it somehow better that these services are scattered across different machines? Because of the cloud. Done laughing yet? Seriously though - for many businesses, the biggest cost for software isn't the software anymore. It's the bandwidth, hardware, CDN costs, etc. Now that everyone has a mobile device, there's just that much more traffic. And that ...


4

It appears that you're focusing on one specific point in Mark Richard's paper without considering the context that the rest of the paper provides. Read the following three paragraphs (quoted from the paper). I have highlighted some key points in bold: SOA is well-suited for large, complex, enterprise-wide systems that require integration with many ...


3

To me, the middle tier is not actually the middle tier because regardless of how isolated the design is and how stateless the DLLs are, they execute in the context of a web server only and essentially a part of the web application. No, the middle tier could be in another server(s) altogether when it comes to large applications. For example you might ...


3

We know that nowadays the systems are designed as web applications. Every imaginable system is either converted or planned to be converted to a web app. Huh? While web apps are certainly quite popular and useful, they are by no means the be-all-end-all. Here are some cases where web apps are a poor choice and a "desktop" app would be a much better fit: ...


2

Using .NET you're able to use EF with the Oracle Data Provider. You can also use nhibernate for a RDBMS agnostic framework. If you're in the Java world you have a few big ORM choices: Hibernate, TopLink and I've also come across Apache OpenJPA being used. In my experience with Java, Hibernate tends to be used more often and I've not commercially seen ...


2

TL;DR. I have had the pleasure of drinking a lot of Microserver flavored Kool-Aid, so I can speak a bit to the reasons behind them. Pros: Services know that their dependencies are stable and have had time to bake in Allow rolling deployments of new versions Allow components to be reverted without affecting higher layers. Cons: You cannot use the new and ...


2

Wikipedia has a suitable definition for Middleware. It says: Middleware is the software that connects software components or enterprise applications. [It] is the software layer that lies between the operating system and the applications on each side of a distributed computer network. Typically, it supports complex, distributed business software ...


2

(Disclaimer: I don't know any of the technologies mentioned in the question; I'm just inferring from the descriptions on the question itself and the linked articles.) Dependency and the order of execution. Based on the linked documentation, It seems you can control the order of execution of middlewares simply by calling app.use(...) in a particular order. ...


2

From my understanding of hooks this is true. The way I understand hooks it that you can execute some code at a predefined point during the execution flow. Afterwards the application continues as if nothing happened. This is very abstract so I would like to express this using an example: Lets say you can execute code when an before_authentication hook is ...


2

First, you need to decide, overall, whether you wish to treat the client application as "trusted." If you are not sure, you should treat it as untrusted. It's not personal; this doesn't mean you think the folks running that system are not trustworthy. It simply means that you wish to contain the risk, e.g. you do not believe they have the same level of ...


1

This type of strategy is certainly achievable, but the red flags I see are: bespoke middleware platform my first major technical project a strict deadline to make this happen If you think you can leverage your existing exports, know enough database fundamentals to design the table structure, write the import code, and write the interface between your ...


1

The ESB must be able to call the functions of A and B using their exposed API's. So each system must expose an API using a protocol that the service bus can use. A web service is possible, but ESB's support many. Then the ESB should expose services in the best format that external systems can consume. So what the ESB exposes does not need to be the same as ...


1

Neither #1 nor #2 would give you unit tests, in my opinion. While there is no objective distinction between unit test and integration test, a test that covers some code you own and some code you don't own would probably be considered integration more often than not. Since Go supports first-class functions, the simplest way to convert your example to support ...


1

As it turns out, my understanding of the word "hook" (and my usage of hooks in Slim 2), is different from that of the developers of Slim. Apparently, the developers weren't even aware that people were using hooks to modify behavior at arbitrary points in the code - the assumption was that people were only using the slim.before.* and slim.after.* default ...


1

There is a distinction between "Logical Architecture" and "Physical Architecture", you can have the same code base and yet deploy it on a Web Tier and Middle Tier, or just strictly on the Web Tier. What you decide is based on a myriad of factors. If your Web Tier is merely a pass through to call more or less mirror services on the Middle Tier, then it ...


1

I'm going to consider this more in the form of a risk management plan than a program design, because that's where the program design has to start. It looks as though you have two communication channels - the database and a message queue. We'll assume the database is accurate, since if it fails it will normally require manual intervention. But everything ...


Only top voted, non community-wiki answers of a minimum length are eligible