|
Yeah, I got that. I just disagree with your premise.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
That's fine.
From what I read of the data mapper pattern, all it really says is separate the data logic (CRUD) from the domain object stuff (i.e. don't use the active record pattern), which, while lacking in detail is great advice.
I saw that you mentioned the unit of work and repository patterns in your previous post and took a quick look at them. I don't see how they directly relate to updating domain objects. From what I saw, it seems like the controller or something has to tell the unit of work class to update a domain object. How/where do you deal with determining how/when to update domain objects?
|
|
|
|
|
The Repository pattern is 100% about updating domain objects against a persistence store. UoW is about making those updates atomic in nature. The Repository is purpose-structured to use the Data Mapper pattern; as the entire purpose of the pattern is to define a persistence touchstone for model classes (AKA domain objects).
You can do it procedurally in a more functional/workflow model (such as the controller queuing and update) or, as you're advocating, through an event driven paradigm. In desktop applications I like to hook updates to ViewModels through INotifyPropertyChanged, for instance, so that user updates to relevant objects wrapped in ViewModels will update when the user updates them.
Event-driven updates are basically a must in any asynchronous approach, but I would argue that they need to be hooked to model handling logic rather than the models themselves.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
Paramecium13 wrote: I propose To whom?
I like the idea, but it will probably get buried under a lot of other posts in the forum. Given the paragraphs in your post, I am convinced that you can write an article about the subject; ideally, you would also explain the Data-Mapper Pattern itself, include a simple example, and add your proposed change. Aw, and pictures if possible, people love pictures
The results will then also show up higher on Google, as articles seem to be favored over forum-posts. It would also change the audience from "people scanning the forum" to "people watching the article queue for new stuff to learn". If enough people agree with your article, then it may become "the" way to do it.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Yeah. I might write an article. I figured I'd post it here first to see what people think.
|
|
|
|
|
Recognizing the growing number of applications that used two or more programming languages in their implementation, I extended the Reddick VBA Naming Conventions to cover virtually any programming language in 2006, naming the extended conventions the Reddick-Gray Unified Naming Conventions. Fast forward 12 years, and a Scottish musician living in the south of France finds a copy, and writes to me with some great questions and an excellent critique. The result is version 2.10 of the conventions, now online [here].
The work is based on Hungarian Notation because I believe they are as useful today as they were when Charles Simonyi published his paper. Though some claim that modern integrated development environments render the Hungarian prefixes moot. I think not, for the following reasons.
- Code Reviews: Copies of code that are dropped into email messages and distributed for code reviews lose the connection to the IDE tools that let you see the types of the variables.
- Git Repositories: Copies of code that find their way into a Git repository lose their connection to the IDE tools that let you see the types of the variables.
- Bulletin Boards: Code posted on a bulletin board, such as the Code Project question forums and Stack Overflow are deprived of their type hints.
- Too Many Lines to Fit on Screen: Frequently, it is impractical to keep every routine short enough to fit on one screen. Even if you adhere to the accepted practice of declaring variables close to their first use, all it takes is one long
switch block to hide the declaration.
I rest my case.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
modified 29-May-18 15:00pm.
|
|
|
|
|
The first obvious question would be whether it is based on System or Apps hungarian. After a bit reading, looks like Systems Hungarian.
X DO NOT use Hungarian notation. Hugarian notation – it’s my turn now – Larry Osterman's WebLog[^] - where "sz" is a prefix for a null-terminated string. How often did you have to convey in C# or VBA-code that a string is null-terminated instead of Pascal-style?
David A. Gray wrote: Frequently, it is impractical to keep every routine short enough to fit on one screen. No, it is not. Any example from MSDN fits on a printed fixed-font 80 column A4 paper. Anything longer probably has more than a single responsibility and is a candidate for refactoring.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Eddy Vluggen wrote: The first obvious question would be whether it is based on System or Apps hungarian. After a bit reading, looks like Systems Hungarian.
X DO NOT use Hungarian notation. Hugarian notation – it’s my turn now – Larry Osterman's WebLog[^] - where "sz" is a prefix for a null-terminated string. How often did you have to convey in C# or VBA-code that a string is null-terminated instead of Pascal-style?
Just because Microsoft says it's so doesn't make it so. IMO, this advice is ill-conceived for reasons that I gave in my original post. As for distinguishing null-terminated from counted strings, I'm sure there's an edge case somewhere, but it's never been a concern to me that couldn't be addressed by other means, such as passing the length of a counted string, or zero for a null terminated string of unknown length.
Eddy Vluggen wrote: David A. Gray wrote: Frequently, it is impractical to keep every routine short enough to fit on one screen. No, it is not. Any example from MSDN fits on a printed fixed-font 80 column A4 paper. Anything longer probably has more than a single responsibility and is a candidate for refactoring.
Citing examples from MSDN is an insufficient defense. I live in a real world in which not every routine can or should be that short. Moreover, what happens when your view of the source code is constrained by the many other windows of an interactive debugger?
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
David A. Gray wrote: Just because Microsoft says it's so doesn't make it so. That should be obvious, but they're not just saying it; they have a good reason to: they have lots of experience with Sys Hungarian. I'm personally glad that we don't have to lookup/invent prefixes for every new variable-name.
David A. Gray wrote: I live in a real world in which not every routine can or should be that short. I forgot, the 20+ years of coding on my side were fictional ofcourse
David A. Gray wrote: Moreover, what happens when your view of the source code is constrained by the many other windows of an interactive debugger? You learn to click the windows to "bring it to front".
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Eddy Vluggen wrote: they're not just saying it; they have a good reason to: they have lots of experience with Sys Hungarian. I'm personally glad that we don't have to lookup/invent prefixes for every new variable-name
Maybe they think those are good reasons, but they also think they are the smartest people on the planet. If you don't believe me, just ask most any of them, and they won't hesitate to tell you so.
Undoubtedly, Microsoft, the corporation, has lots of collective experience, but that doesn't guarantee that they have all the right answers. They may have answers that work well in their closed universe, where everything lives exclusively in a Visual Studio editor window. The real world isn't nearly so cloistered.
Eddy Vluggen wrote: I forgot, the 20+ years of coding on my side were fictional ofcourse
You cited examples from MSDN, and my response was based on that. I know who you are; you're another curmudgeon like me, who has been at this for many years.
Eddy Vluggen wrote: You learn to click the windows to "bring it to front".
That's no help when it's one of many windows that share the space on a desktop. Sometimes, you just can't afford to make the window too big, because you need to see it alongside several other windows, such as the Watches and Call Stack windows. Furthermore, I still do some work in C and C++, and I usually debug that code from a disassembly view.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
Before I begin; it's not personal, I'm just very sceptical with anything new. I can see you put in quite some effort and time. Anyone who doesn't like the proposed NC from MS would do good to take a look at it - having the same NC means consistency and predictability.
David A. Gray wrote: Maybe they think those are good reasons, but they also think they are the smartest people on the planet. They do own the leading OS, the leading Office-suite, and some more. And yes, it is rather smart to ask your customers what they want.
David A. Gray wrote: Undoubtedly, Microsoft, the corporation, has lots of collective experience, but that doesn't guarantee that they have all the right answers. Same goes for my doctor. I'm not saying that they are without flaw or that they cannot be wrong; I'm saying they have "some" experience in the field, writing some very succesfull apps and working with developers[^].
That doesn't mean that I'm a Microsoft-fanatic; there's always room for improvement, and you might be presenting a good idea - but in Garfield terms, I need to know what is in it for me. Why would I use it? What benefit does it give me? That needs some other argument than simply "MS is arrogant".
David A. Gray wrote: You cited examples from MSDN, and my response was based on that. I tend to use that a lot, yes.
David A. Gray wrote: Sometimes, you just can't afford to make the window too big, because you need to see it alongside several other windows, such as the Watches and Call Stack windows. Those things are integrated in the IDE, and there's a second screen/monitor dedicated to debug-windows. That's not just Visual Studio; MonoDevelop does the same.
We weren't talking about the call stack window; you were introducing a naming-convention. I can remember the list of "required prefixes" from VB6/Access, and the wastefull discussions to agree on a new prefix if there's a new control introduced. Aw, and changing all the names to adhere to the convention, which did not add any value, just bugs (=time+money).
David A. Gray wrote: Furthermore, I still do some work in C and C++, and I usually debug that code from a disassembly view. I haven't touched either in years, so I can't say anything usefull about that situation
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I think it's safe to say that we're generally on the same page. While I spend a lot of time in the Microsoft stack, I don't work exclusively there. I suspect that comparatively few people have the luxury of doing so now, if they ever did. In any case, I try to maintain a broad, technology-agnostic viewpoint. It is from that viewpoint that I believe that Hungarian notation still has merit.
Bear in mind, too, that my chief design goal was to extend the conventions to dynamic languages (e. g., Perl, JavaScript, PHP) that don't enforce variable typing, and to devise one unified convention that can be applied to any programming language, ensuring consistency of names across entire code bases, regardless of implementation language. With respect to the dynamic languages, the conventions put forth a subset of one-character prefixes that cover only a handful of categories ( ( integer || string || object ) && ( parameter || return || private ) && array ).
Nevertheless, although I didn't say so in the RGUNC document, I quit using Hungarian prefixes for business objects a long time ago, because I think that truly is a waste of effort. More recently, I have also begun dropping prefixes from public interfaces. Nevertheless, I retain them for private entities, especially in "system" or "utility" libraries.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
David A. Gray wrote: In any case, I try to maintain a broad, technology-agnostic viewpoint. It is from that viewpoint that I believe that Hungarian notation still has merit.
Dim iCurDate As String Happened too often in brownfields.
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability." (From some manual, and it is good advice)
David A. Gray wrote: my chief design goal was to extend the conventions to dynamic languages (e. g., Perl, JavaScript, PHP) that don't enforce variable typing I dislike all weak languages. Makes weak programs that are based on an on error resume next philosophy.
David A. Gray wrote: ensuring consistency of names across entire code bases, regardless of implementation language That sounds like an advantage, but why does it need to be consistent in different languages? Delphi has some weird string-types, does it make sense to unify that with JavaScript? And what do I gain by doing so?
David A. Gray wrote: Nevertheless, I retain them for private entities, especially in "system" or "utility" libraries. If you can be consistent, then it would not be much of a problem; but if the prefixes are there, I expect them to be correct.
So, I would not oppose the use of it, especially not if one is so accustomed to doing it so that it becomes a habit and goes nearly automatically.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Eddy Vluggen wrote: I dislike all weak languages. Makes weak programs that are based on an on error resume next philosophy
I don't either, but they are here to stay. As for the "weak" languages being based on the "on error resume next" philosophy, this was once true, but modern ECMAScript, PHP, and Python support rich try/catch/finally blocks, custom exceptions, and pretty much anything else that was once reserved for C, C++, C#, and the like.
Eddy Vluggen wrote: So, I would not oppose the use of it, especially not if one is so accustomed to doing it so that it becomes a habit and goes nearly automatically.
I've been using them for so many years that they are automatic. Indeed, I have to consciously elect to refrain from using them.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
"Hungarian Notation" can be traced to a time when some languages would only support "very short" variable / db names (e.g. 10 chars); and / or case-insensitive.
Now, we are encouraged to use meaningful names (with limits rarely less than 256 chars) that are a lot more expressive than simply int vs double (which OFTEN changes), etc.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Gerry Schmitz wrote: Now, we are encouraged to use meaningful names (with limits rarely less than 256 chars) that are a lot more expressive than simply int vs double (which OFTEN changes), etc.
That is, of course, a risk that you take when you use Hungarian prefixes.
- However, when you change the type of an internal variable, renaming it is straightforward.
- OTOH, when you change the type of a parameter, you break the interface, and the new interface must be documented and published as such. In that case, renaming the argument is not only acceptable, but desirable, since it exposes references to the argument as diagnostic messages.
Nobody is forcing you to use Hungarian notation. Only a portion of these conventions relies upon them, and the remaining conventions stand on their own.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
I used to use it; and no one "forced" me.
Me, AND MS, have concluded subsequently that the notation is "passe".
("Renaming", in an established app, is a LAST resort IMO. And a "parameter" is not the same as an "interface"; and doesn't apply in this context).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
modified 3-Jun-18 12:28pm.
|
|
|
|
|
Gerry Schmitz wrote: Me, AND MS, have concluded subsequently that the notation is "passe".
Neither of which makes it so.
Gerry Schmitz wrote: ("Renaming", in an established app, is a LAST resort IMO. And a "parameter" is not the same as an "interface"; and doesn't apply in this context).
As is usually the case, renaming for no particular reason is bad practice. Nevertheless, renaming a private variable that has function scope is neither unusual, nor necessarily a last resort. since designing software is a thinking man's game, there is ample room for thinking things through, and renaming variables judiciously.
In the context in which I used the term, parameter is a key element of an interface. In this context, interface is the combination of the signature (order and types of parameters) and the return type of a function. No thanks to IntelliSense, the parameter names displayed by Visual Studio reflect the internally defined names of the parameters of the selected method. Hence, their names are part of the interface definition, whether we like it or not. This is the only reason by which I can justify abandoning Hungarian prefixes for them. Even then, I think doing so is questionable because, in so doing, you throw away some very important metadata.
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
I am developing a simple web blog. As a DB system, I want to use XML.
How doable is it?
How proper/suitable is it?
Why XML?
1-) Just for the sake of it. I mean I never saw a blog based on XML.
|
|
|
|
|
Rakanoth wrote: How doable is it? Very; a matter of loading the data in ASP and displaying it. Online editing might take a bit more.
Rakanoth wrote: How proper/suitable is it? XML works best as a data-exchange format, not as a storage-engine. As long as your not doing complex queries on your data things should behave well.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Any tips to apply HATEOAS into CQRS .Net Core web service which Read and Command stakes are separately deployed into 2 different web apps ?
|
|
|
|
|
Dear experts
I need to secure an application to prevent from unauthorized use. I like to do this a simple as possible. This in regard to me to program it but also for the customers to make the handling as easy as possible for them.
At this moment, I try to prevent from creating something like a licensefile. My idea so far is:
User
The user gets displayed a so called SystemID: XXXX-XXXX-XXXX-XXXX
The System ID is generated by MD5 Hashing of e.g. [CPU ID, MOTHER BOARD ID, etc] and Base36 encoded.
Licensor
From the above SystemID a signature will be determined using a Private Key.
From this signature again a MD5 Hash will be calculated and encoded also in Base36.
Finally this will result in the activation key: YYYY-YYYY-YYYY-YYYY
This activation key will be used then (PUBLIC_KEY, ...) to verify the activation
My strange question
Is the above more or less secure? I know it is hard to give an answer, this in regard that I even don't know a scale to measure "secure".
Maybe the question should be more: Is it easy to hack this activation procedure?
For me it looks nearly uncrackable (or let's say it would be very difficult). But this also only because I have no affinity for these crypt stuff
Remarks
- The application is Native W32 programmed in c++
- For me personally, hiding the final something like bool IsActivated() is at least same difficult/critical
- Base36: Looks like I Need to think about this again.... Base36_Enc(Max(uint_32)) will be "1z141z3"
Thank you very much in advance for your comments.
It does not solve my Problem, but it answers my question
modified 19-Jan-21 21:04pm.
|
|
|
|
|
0x01AA wrote: For me it looks nearly uncrackable
If it runs on my computer I can always hack it.
Other than that I suggest googling.
|
|
|
|
|
I googled very much believe me! Now please tell me how to prove whter the above is good or bad...
[Edit]
And yes the down vote is from my side. I think you should not earn "answer" Points for your message before.
It does not solve my Problem, but it answers my question
modified 19-Jan-21 21:04pm.
|
|
|
|
|
The upvote is mine. There is no way to prove how good it is; and with the amount of cracked games out there, you have little chance of outperforming those teams.
The good news is that those games gather a lot of attention, and most business-apps do not.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|