Den 07/06/2013 kl. 21.42 skrev Ant Kutschera <ant.ku...@gmail.com>:
> after all the hard things we have learned about OO
Would that be all the hard things learned about class orientation? and
what would they be?
Hi all,
On Jun 7, 2013 3:42 PM, "Ant Kutschera" <ant.ku...@gmail.com> wrote:
> If using roles is a goal of DCI, perhaps the article should state that. Reading it, roles seem to be part of the implementation details.
Would the group agree with the following:
Roles are essential to DCI because without them there would be no way to achieve both full OO and separation of data from behavior. Roles could be implemented in different ways but there would need to be some notion of roles or it would not be DCI. Perhaps roles should be emphasized more in the Wikipedia article.
~~~
Ant, I will probably have a couple more comments once I've had a chance to read your paper. Thank you very much for the explanation. I see the parallels better now.
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
The interaction is implemented as Roles which are played by objects at run time.(emphasis mine)
There is a special Role called self
which binds to
the object playing the current Role.
I think it might also be worth mentioning the this keyword, explicitly stating
that this and self both point to
the same object. The difference as far as I understand it is that
this self can only
access methods of the data object, whereas this can be used for either the data
object methods or the role methods (as long as there are no naming
conflicts). I think Rune mentioned somewhere that the way self behaves as a
keyword is somewhat similar to super (or parent in some languages), in that it's a way to
explicitly refer to a method of the same name that might have been
"overridden" (in this case by a role method).--
You received this message because you are subscribed to a topic in the Google Groups "object-composition" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/object-composition/e6K7KhKkdnM/unsubscribe?hl=en.
To unsubscribe from this group and all its topics, send an email to object-composit...@googlegroups.com.
The two solutions differ because of the semantics, and as such, it is not recommended that a service solution be modified to use an identical mental model as the DCI solution.Having said all that, here's my new attempt at a micro-SOA version of the Transfer Money example I posted previously:
In your paper, you describe the services as being analogous to roles rather than contexts
...which means that the use case behavior is now in the controller rather than in a service, which I think you would probably agree should be avoided (especially for use cases that span multiple controller methods).
Overall I think my first example above (in this post) is the best fit for SOA, but it doesn't represent the roles well. It doesn't make much difference in a simple example like this but I think that in more complex cases, roles can help greatly to keep the system behavior logically organized (without a certain discipline, SOA Services can easily end up being Transaction Scripts, which aren't terrible but we can do better).
It's not that you can't represent roles in SOA but rather that it doesn't lend itself to them as well,
I took a look at the Wikipedia article and the word "role" appears more than 80 times. I think that's enough. I tried to capitalize all instances of the word for emphasis.
I think the distinction between this and self can be a bit confusing
I think it might also be worth mentioning the this keyword, explicitly stating that this and self both point to the same object.
self
(or this in some
implementations, usually depending on which is more idiomatic for a
given programming language) which binds to the object playing the
current Role.On Jun 9, 2013, at 6:20 , Matthew Browne wrote:
I think it might also be worth mentioning the�this�keyword, explicitly stating that�this�and�self�both point to the same object.
Only in some programming languages. DCI is PL-inspecific. We call the role self. There may be other pointers to the same object, including this. And "points to" is funny. There are no pointers in DCI, though there are names of objects and aliases for those names, and in many programming languages they are implemented as pointers.�
There is nothing in C++ that says that this should point to the beginning of the object � in fact, in may MI implementations, it rarely does. So it may not have the same "value" (in terms of its bit representation) as self.
There is a special Role called self
(or this in some
implementations, usually depending on which is more idiomatic for a
given programming language) which binds to the object playing the
current Role.
If there are no objections then I can make the edit.
"self" isn't a Role.
AFAIK "self" is simply an implementation detail, dependent on language.
--
On Jun 10, 2013, at 1:49 , Matthew Browne wrote:
If there are no objections then I can make the edit.
I don't see how you could achieve both that and an "object style of thinking" without roles,
Is there any way of indicating in the article that the DCI implementation can choose either self or this in a way that's both accurate and not confusing?
Jim, in my proposed edit I didn't say they were the same; I was simply pointing out that the "role" of the data object isn't always called "self" (it can be called "this" instead).
If you call it "this" in your DCI implementation you're likely to confuse people.
I get your point that "self" and "this" are different in C++, but I don't see how creating a property called "self" would be helpful in either PHP or Javascript.
$this->self
I think most programmers would find that more confusing than simply using $this.
However, that's not possible to do this in PHP without source transformation
$this->self
I think most programmers would find that more confusing than simply using $this.
I for one would like $self. I don't see the reason for making this hard.I don't know if you've ever programmed in PHP or Javascript, but if not, I think perhaps you're still not understanding that using self by itself is not possible in native PHP or Javascript. Instance properties must be accessed via this in those languages ($this->foo or this.foo).
I don't think we are going to fix it by changing DCI.
My current understanding is that in languages like Marvin or Scala (to set aside PHP/Javascript for a moment), which don't support C++ style multiple inheritance, within a role method, self is almost always interchangeable with this. I believe that's what Rune was saying.
Thanks Ant, that makes sense. I'm just wondering, which of my examples do you think comes closest to micro SOA as you would approach it?
Here it was hard to decide which object should play the role of a LedgerWriter - the account, or the amount? What do you think?
Hi Ant,
Some comments on my part in relation to your reasoning.
> This example also shows how micro SOA handles roles. The ledger service has an interface which only knows about credits, consisting of an account reference and the value to transfer, in the banks own currency. The data (reference number and value) are playing a different role - they are playing the role of a credit, rather than the roles of an account and some money. They end up in this role because the accounting service maps this data into the appropriate role (data class) before calling the ledger service.
>
I think that conclusion requires a very broad definition of "role", which I don't see align with the definition of role in DCI. In your example the calling service is just packaging up some data into a data structure required by the API it is to call. To me that is not a role, it is a parameter object, or, if the combined value has a greater meaning in the domain it might be a "value object" as defined in DDD.
> I guess the main difference between the micro SOA solution and the DCI solution is that while the micro SOA solution uses objects, it isn't object oriented, in that the transfer and deposit methods are not called on the objects containing the data. But they are contained on objects and as such, this solution is object oriented. In fact it's multi-paradigm, because it uses object orientation since services are instances of classes; SOA because there is a service hierarchy; aspect oriented programming due to the annotations which can be used to take care of cross cutting concerns; and functional programming, where for example the currency services returns an Option which is a monad, and which is used to map the data into a Credit instance in the accounting service.
>
I think the micro SOA approach is service oriented, yes. It might also to some extent functional, even though I think there are many criterias to fill before being regarded as "fully functional" by the FP community.
However, to me the solution is only OO and AOP because the technical platform you have chosen requires it from a technical perspective. From a domain point-of-view, stripping of dependency injection, scalability- and transactional concerns (from a technical point-of-view they could be applied only in an outer service, wrapping the whole domain code), the domain logic could just as well have been implemented as static methods. Hence I can't see there being any OO aspect inherent to the micro SOA approach.
Now, wether that is god or bad depends on ones preferences. On my part, I don't like the approach, because I think it subtracts more value, compared to "everyday OO", as e.g. applied in the technical parts of DDD, and OO as applied by DCI, than it adds.
- Compared to "everyday OO" micro SOA adds separation if parts that move at a different rate, which is good, but it does it by scattering the algorithms in different services, related only by the types of parameters they accept.
- Compared to DCI micro SOA allows for reuse of algorithms (services can be reused, whereas roles cannot). However, reusing small parts (services) of an overall algorithm (a use-case) makes maintenance harder since you need to consider (and test) every use-case where that service is used in order to safely make a change. This type of re-use might be to low level to have any relation to the user- or business mental models. In addition, with the over all algorithm broken down into several small services it is hard to see the overall flow, whereas in DCI the whole algorithm of a use-case is contained within the context.
Ultimately it comes down to how you decompose your system. I think both DDD (keeping data and functionality for a given domain concept together) and DCI (keeping algorithm of the whole use-case together) have advantage over the micro SOA approach. I think it makes sense to re-use, either on domain concept level or on use-case level since they are both high enough level to have a notion in the business side of things. Currently I'm leaning more and more towards favoring the use-case level.
BR,
Jörgen
+1
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
Consider [...] a word processor. When the user wants to insert an image from a file, the user selects the file and clicks the OK button to get the system to read the file, place it in the current paragraph and display it on the screen. The author has quizzed a number of people about how they model such things in their minds and has always been told that it is either the user themselves, or “the system” or the word processor (a higher power, a service) which does these tasks. It has never been stated that the document or a paragraph or any other entity which is part of a typical document data model does such things.
Things such as game engines and word processors have state, but this state is the “M” in MVC; it is the data model which SOA or DCI enrich with functionality. Such state does not need to be modelled together with the higher-power behaviour which operates on it, as is suggested by object orientation, i.e. in the same class. Rather the higher-power behaviour can and should be split out into another class. Whatever the situation, in almost all problems solved by software, one can find a higher power responsible for things related to use-cases or algorithms.
In the real world there's no such thing as a 'LedgerWriter' so to be able
to understand the code I first need to learn a new concept even if I'm
an expert in the banking domain.
I think that conclusion requires a very broad definition of "role", which I don't see align with the definition of role in DCI.
- Compared to "everyday OO" micro SOA ... scattering the algorithms in different services, related only by the types of parameters they accept.
Ultimately it comes down to how you decompose your system.
why don't you take my user stories and show us your DCI solution?
Where I struggle with DCI is in extracting roles out of the use cases.
why don't you take my user stories and show us your DCI solution? I would be interested in the roles that you extract from the user stories.
I can't. A user story defines an end/a goal
Primary Actor(s):Rather, the internal actors (DCI roles) are usually just part of the use case description.
Internal Actors:
Precondition:
...
Main Success Scenario:
...
But I haven't seen any examples where the internal actors are spelled out specifically; all the "internal use case" descriptions I've seen just follow the regular use case template; in other words I've never seen something like this:
Clearly, you have not worked at the Bank of Kutschera, based here in Switzerland. In that bank you will find a little man, who looks much like the bankers in Harry Potter, who writes every transfer and deposit into a little black book, known in the bank as the ledger. He is referred to as the "ledger writer". He, like many swiss bankers, will help you avoid your taxes if you live in the US.
I think that most if not all of Trygve's DCI examples are internal use cases (front loading, for example). Dijkstra's algorithm stands as a good example, and it can be written as a use case (a somewhat messy one). I don't understand why they should all of a sudden have become verboten in DCI.
But I haven't seen any [use case] examples where the internal actors are spelled out specificallyMy point in mentioning this was that I haven't seen any internal use cases where it was completely straightforward to extract the DCI roles from the use case. Internal actors and use cases should indeed be represented in DCI; I'm just talking about the process of identifying them.
1. SourceAccount verifies funds available.I suppose the above list of steps would qualify as an internal use case (or at least part of one).
2. SourceAccount and DestinationAccount update their balances.
3. SourceAccount updates the statement info.
1. The system verifies that the source account has sufficient funds availableObviously, the first version is much more helpful for DCI (and perhaps in general), but we should keep in mind that it's just one interpretation. As discussed earlier, we could have an "accountant" or "ledger writer" role here as well.
2. The system updates the balances for the source account and destination account
3. The system updates the statement info for the source account
--
You received this message because you are subscribed to a topic in the Google Groups "object-composition" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/object-composition/e6K7KhKkdnM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to object-composit...@googlegroups.com.
My point in mentioning this was that I haven't seen any internal use cases where it was completely straightforward to extract the DCI roles from the use case.
Though Ant maybe doesn't know use cases, let's imagine that he did.
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
Maybe we need more example use cases to accompany the internal use case examples. Is your observation any more than the lack of such examples?
I have always looked down on internal use cases as I've too often found them to be the nerds' revenge: pseudo-code with overkill. [...]
But they probably do have a place.
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "object-composition" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/object-composition/e6K7KhKkdnM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to object-composit...@googlegroups.com.
First of all: What Cevat said. Good insight.
Second: I think you might be looking for something that isn't there, something that provides a formal or traceable basis in use cases for DCI. Use cases are not a formal notation. Their purpose is to elicit dialog.
It is like we teach in Scrum: a Product Backlog Item isn't itself the requirement. It stands for the requirement. Its presence is a provocation to dialog.
Now, beyond that, use cases can be used to structure requirements. They can designate dependencies between them (build the basement before the walls) or refinement relationships (three-way-calling refines, and should be packaged together with, a plain line-to-line call). Use case is not Swedish for "scenario" (the word is "användarfall" ...) A use case like "phone call" might wrap all the scenarios for basic line-to-line call, for three-way-calling, for call forwarding, and so forth. The "Phone Call" use case comprises all of those together. Each one individually is a scenario (and each one individually could be a PBI in Scrum).
One can incrementally introduce scenarios to a use case, over time.
I typically use DCI Contexts to represent use cases: i.e., they are one closed copy of code that captures all scenarios. You will not anywhere find any mapping between the code and the structure of any one of the scenarios in a use case. In some sense, you need to do manual weaving of the scenarios into the code that implements the use case, much as you need to weave aspects into join points in AOP. The DCI approach is much more general and powerful than AOP in part because it lacks the very kind of formal mappings that you may be seeking.
The only reasons I distinguish between internal and external use cases is on the principle that Kay's objects represent mental models. I have a prejudice that the best use cases represent the prejudiced mental models of end users, in part because I've seen far too many computer scientists force their will and their mental models on end users. It shows through all the way to the user interface, and that's why so many interfaces are hard to use. (Just try putting a picture in the middle of a paragraph in Word, positioned right where you want it.) I used to fight Trygve on this, with me more advocating the end user and Trygve advocating the programmer, but Trygve used my own words against me, invoking the agile need for team dialog and thinking. These problems can be solved with dialog as one finds in the agile world: hence, the "everybody, all together, from early on" as a central tenet of DCI. As long as the programmers and the end users are in dialog and genuinely seek consensus (how Nordic...), I don't care about the difference between internal and external use cases.
I want a single shared mental model wherein both the programmer and end user develop an appreciation for each other.
That can only happen if the Team is organized right, to facilitate the dialog. If use cases are thrown over an organizational wall with external use cases on one side and internal use cases on another, all is lost. That's why the two first patterns of the MVC architecture relate to domain analysis and to the organizational structure (http://heim.ifi.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf). It should be no different in DCI. DCI is the use case side of the coin; MVC is the domain visualization side of the same coin.
There is a point at which programmers have to reason about technical implementation stuff that is rarely of concern to the business, and which is common reusable logic, such as logging in. That's what habits are. Because they lack real context, they're not use cases. People use DCI for such things anyhow, but it's a bit dodgy to write general code for something intrinsically so uncontextualized.
On Jun 19, 2013, at 4:21 , Matthew Browne wrote:If the internal use cases are actually written down (in a role-oriented way), then I agree that determining object roles from use cases is straightforward. If, however, the use cases are only in the developers' minds (not written down), as you seem to have suggested in your subsequent posts, then it very well might not be straightforward - it depends on the developers, the complexity of the use case, and the number of possible interpretations of the roles.Oh, use cases are written down. It's just that they are written (mostly) after the many-to-many discussions have taken place.
If, however, the internal use cases are only in the developers' minds (not written down)...
A backlog item can ultimately become a history item.Now, beyond that, use cases can be used to structure requirements. They can designate dependencies between them (build the basement before the walls) or refinement relationships (three-way-calling refines, and should be packaged together with, a plain line-to-line call). Use case is not Swedish for "scenario" (the word is "användarfall" ...) A use case like "phone call" might wrap all the scenarios for basic line-to-line call, for three-way-calling, for call forwarding, and so forth. The "Phone Call" use case comprises all of those together. Each one individually is a scenario (and each one individually could be a PBI in Scrum).
A use case can be part of the resolution of a PBI?
Yes. One of the great advantages of the DCI programming paradigm.One can incrementally introduce scenarios to a use case, over time.
I typically use DCI Contexts to represent use cases: i.e., they are one closed copy of code that captures all scenarios. You will not anywhere find any mapping between the code and the structure of any one of the scenarios in a use case. In some sense, you need to do manual weaving of the scenarios into the code that implements the use case, much as you need to weave aspects into join points in AOP. The DCI approach is much more general and powerful than AOP in part because it lacks the very kind of formal mappings that you may be seeking.Represent use cases, not implement use cases?
one use case => one context? Is this an expression of a dogma?
The roles of such a context would be the union of all the roles needed by all the system operations needed by all the scenarios.
Do you rule out that a separation into several contexts could lead to more readable code?
In the DCI glossary, I say
"The terms related to the system’s handling of a Use Case are of special interest:
- Use Case
- - Scenario
- - - Command
- - - - System Operation
- - - - - Context
- - - - - -Role
- - - - - - - RoleMethod"
I now read you to say that this is an over-simplification, there are no such simple relationships.
If that is so, I'm completely confused about how to go from use case to code and back to user mental model. I clearly need to re-read your book.
... I don't care about the difference between internal and external use cases.
I fully agree that DCI is a good foundation for the end user's mental model and for the discussions in "everybody, all together, from early on"..
But IMO, DCI is more:
I see DCI as a paradigm for computing and insist that I shall be allowed to use it as such even if there are no end users in sight.
I have a vision of DCI becoming a lingua franca of computing, spanning any number of programming and modeling languages.
A great advantage of DCI is that it is has been demonstrated to be a natural metamodel of human mental models. This applies to end users, other stakeholders, programmers, game developers, composers, schoolchildren, etc.etc.
Logging in with its authentication can be a very complex process involving the services of trusted sites etc. End users shall not and should not know this process, but somebody need to design and implement them They too need computer augmentation. Perhaps more than most because evil doers frequently seem to find holes in their protective walls.There is a point at which programmers have to reason about technical implementation stuff that is rarely of concern to the business, and which is common reusable logic, such as logging in. That's what habits are. Because they lack real context, they're not use cases. People use DCI for such things anyhow, but it's a bit dodgy to write general code for something intrinsically so uncontextualized.
Does that drive to the point you are wondering about?
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
For more options, visit https://groups.google.com/groups/opt_out.
On Jun 19, 2013, at 11:40 , Trygve Reenskaug wrote:
A backlog item can ultimately become a history item.Now, beyond that, use cases can be used to structure requirements. They can designate dependencies between them (build the basement before the walls) or refinement relationships (three-way-calling refines, and should be packaged together with, a plain line-to-line call). Use case is not Swedish for "scenario" (the word is "användarfall" ...) A use case like "phone call" might wrap all the scenarios for basic line-to-line call, for three-way-calling, for call forwarding, and so forth. The "Phone Call" use case comprises all of those together. Each one individually is a scenario (and each one individually could be a PBI in Scrum).
A use case can be part of the resolution of a PBI?
What do you mean by: "history item"? I used to be big on keeping use cases around, and I've always advised people to do that. Gertrud used to do that, too, but found that people never really went back to the information they stashed away. I started noticing the same thing. So I don't admonish people to keep the stuff around. It's quite un-lean.
Formally, a use case is a way of organizing multiple scenarios (one scenario in the degenerate case) along with their "non-functional requirements" (NFRs). I usually think of an NFR or a scenario as being the thing that goes into a PBI, whereas a use case is the formalism used to manage, organize, or group scenarios. Use cases are still essentially scenario-based, so we could informally say that "a use case can be part of the resolution of a PBI."
Yes. One of the great advantages of the DCI programming paradigm.One can incrementally introduce scenarios to a use case, over time.
This is a two-edged sword. I can't find a scenario in a Context: I can only find the current state of the use case, which may represent several scenarios and NFRs woven together.
I typically use DCI Contexts to represent use cases: i.e., they are one closed copy of code that captures all scenarios. You will not anywhere find any mapping between the code and the structure of any one of the scenarios in a use case. In some sense, you need to do manual weaving of the scenarios into the code that implements the use case, much as you need to weave aspects into join points in AOP. The DCI approach is much more general and powerful than AOP in part because it lacks the very kind of formal mappings that you may be seeking.Represent use cases, not implement use cases?
Yes, that is much better said.
one use case => one context? Is this an expression of a dogma?
I hate dogmatæ in general, but this could be a useful dogma if dogmatæ exist... Read on.
The roles of such a context would be the union of all the roles needed by all the system operations needed by all the scenarios.IN THAT CONTEXT. For example, if "Phone Call" is a use case — including party-to-party call, call forwarding, call waiting, and three-way calling — and if I use the above Dogma, then, yes: The Phone Call use case would have all roles for all three scenarios. That means that the Context would comprise roles including perhaps "Three-Way Conferencing Circuit." Perhaps that is unnatural. Then I would break it into three use cases, each with one scenario — IF one wanted to stand on formality and dogmatæ.
But, again, I want to emphasize: The input to a use case is understanding, and the output of a use case discussion is understanding. The output of understanding is code. The output of a use case is not a DCI Context — though the two are close enough to be both interesting and instructive. To violate the dogma would be an exception (as above), but the exception proves the rule.
Do you rule out that a separation into several contexts could lead to more readable code?
That is a delicious question and it depends heavily on the technology being used. Let's say that you had Magic AOP, which is unlikely, because not even Everyday AOP comes close to working. The AOP pundits would say that you could have one *scenario* per Context and then use cutpoints and joinpoints to manage the interference between them. That makes each scenario more readable in the context (sic.) of understanding the individual scenario, but it ALSO makes the system behavior (shades of the term "system operation") more opaque. That's where Aspects tend to fail. Remember that Adele said that in object orientation, "it" always happens somewhere else? In AOP it not only happens somewhere else, but you never quite know when that somewhere-else will hijack the program counter from you. With the current status of AOP technology, the single-scenario-per-Context dream is, I think, a dream.
There may be hope in more modern OO technology like multiple dispatch. There is something pattern-ish and regularizable about drawing a Shape on a Window, but the combinatorics get interesting when you have four kinds of shapes (nicely arranged in an inheritance hierarchy) drawing on multiple kinds of windows (ditto). I have a vague glimmer of hope that it's possible to separate scenarios into their own code modules in CLOS and manage the interaction between them with wrappers, whoppers and multi-methods, but I suspect it doesn't look very DCI-like any more. A good research topic.
In the DCI glossary, I say
"The terms related to the system’s handling of a Use Case are of special interest:
- Use Case
- - Scenario
- - - Command
- - - - System Operation
- - - - - Context
- - - - - -Role
- - - - - - - RoleMethod"
I now read you to say that this is an over-simplification, there are no such simple relationships.
If that is so, I'm completely confused about how to go from use case to code and back to user mental model. I clearly need to re-read your book.
Maybe. I think we're about due for another tête-à-tête.
I fully agree that DCI is a good foundation for the end user's mental model and for the discussions in "everybody, all together, from early on"..... I don't care about the difference between internal and external use cases.
But IMO, DCI is more:
I see DCI as a paradigm for computing and insist that I shall be allowed to use it as such even if there are no end users in sight.
No argument. And it is *a* paradigm for computing rather than *the* paradigm for computing. In fact, I'd say that procedural programming is the paradigm for computing. Ted Calhoun used to point out that computing is little of what we use computers for. I hate the old term "data processing" but I think it strikes somewhat closer to the mark than "computing."
I have a vision of DCI becoming a lingua franca of computing, spanning any number of programming and modeling languages.
I'm skeptical. It is powerful and maybe even the dominant paradigm, but there are other paradigms. The very nature of a paradigm is that it denies the ability to be united with other paradigms by any lingua franca.
A great advantage of DCI is that it is has been demonstrated to be a natural metamodel of human mental models. This applies to end users, other stakeholders, programmers, game developers, composers, schoolchildren, etc.etc.
Probably of most common human mental models related to objects. But there are others more related to values and functions that I wouldn't do this way. Use DCI to solve the quadratic formula.
Logging in with its authentication can be a very complex process involving the services of trusted sites etc. End users shall not and should not know this process, but somebody need to design and implement them They too need computer augmentation. Perhaps more than most because evil doers frequently seem to find holes in their protective walls.There is a point at which programmers have to reason about technical implementation stuff that is rarely of concern to the business, and which is common reusable logic, such as logging in. That's what habits are. Because they lack real context, they're not use cases. People use DCI for such things anyhow, but it's a bit dodgy to write general code for something intrinsically so uncontextualized.
No disagreement, and perhaps I should have chosen my words more carefully. First, I'm saying there are probably things that the programmers know that the Business Analyst doesn't need to know. However, there is something more sinister going on here as well. I am sure you log in to your bank via the web. I dare you to write a general login use case. When I log in to my bank, the login process is incremental and asks for additional information at different points in different transactions (different scenarios). Logging in has to be contextualized to the kind of transaction: it is different for deposits than for transfers than for balance inquiries. And the simplistic "logging in" authentication at the beginning is not reusable across different kinds of transactions, except as a non-value-added (more or less) preamble to lots of other authentication stuff. In most business contexts it wouldn't be a use case; its steps form a preamble to many other (contextualized) use cases. That reusable fragment, Gertrud and I call a "Habit."
Does that drive to the point you are wondering about?
We're certainly dancing around the right Maypole.
Do you rule out that a separation into several DCI contexts could lead to more readable code?
future -> now -> past history
It's immaterial if you record the history or not - it always exists
"Those Who Fail to Learn from History Are Doomed to Repeat It" (Edmund Burke)