What is the Future of Domain/Entity programming at Microsoft? - domain-driven-design

I have currently been looking into Domain programming solutions and trying to predicate the future of the technology for my current customer.
Where is Microsoft going with this considering that there seems to be many different solutions depending on which technology your looking at. For example there is Entity Framework in .net and also there is the whole SQL Server Modelling solution that will be making its appearance in SQL Server. Part of the latter contains a language called M that seems to do the modelling and describing of entities in a decoupled way.
Where are they going with Visio?
Is there a reason that Microsoft seems to be avoiding the whole UML thing and reinventing the wheel, after looking at UML for a while now it seems to be turin complete and does the whole shooting match that could be decoupled from code and storage.
Any help greatly appreciated.

I get the feeling Microsoft is betting on many horses in this race.
The support for POCOs in the latest Entity Framework release, to me, is a (good) sign that DDD is one of them.
With regards to UML. I actually downloaded Visio 2010 recently, and nothing has changed UML-wise the last ten years or so.
Visual Studio 2010, however, has gotten increased UML support (five diagram types supported).

After some reading around, Microsoft are tying things together in the future M and Entity Framework are linked in some mysterious way. From what I gather the idea is that M will create the SQL Server Model (other databases are also valid) and feed into the Entity Framework. To take this even further it looks like you can use your favourite XSI UML tool and feed it into SQL Server Model.
So the disjointed stuff at present will come together.

Related

Need guidance back into programming

I used to be a programmer and unix sysadmin back in the 90's and early 00's. I wrote business software mostly in BBX, which was non-compiled, procedural BASIC. It was all text based when I started, and I only just got into GUI and OOP with ProvideX by the time I got out. I did do some SQL work and understand basic database concepts.
I've continually dabbled since and tried to keep up by running my own Debian web server here at the house, doing little script programs here and there, and most recently learning PHP and Python. But I would like to get versed in the current state of the industry and hopefully make myself employable in it again.
My current learning project is to write a db app that I can use when drag racing to log run data, report based on various combinations of variables, and predict vehicle performance. This should cover IO, data management, and some complex math. I do want to make is sellable, so it has to be in Windows since all other racing software is. My two options now are to write it in MSAccess, which isn't really programming, or to write a front end in Python and use MySQL for the data.
I assume I should go the Python path out of those two, or should I choose a third path that would pay more dividends toward a job? My biggest concern is wasting my time learning pointless stuff. I assume most of the work out there is db related and web based applications, so that would be my ultimate goal. Correct me if I am wrong on that.
Thanks for any input,
Dave
If your goal is to get back into software development, then I recommend that you first ask yourself what type of industry and development setting you'd like to work in. Learn something about the skills those industries are demanding... Then hit Monster and peruse the job qualifications for companies in those industries. Don't limit your view to just language names and broad job descriptions either, but really try to get an idea what sort of developer they're looking for and whether you'd fit in well.
You will be able to find many interesting technologies in lots of different business domains, but what do you really want to be working to help deliver? Python coding, for example, may be interesting, but I'm sure you'd be more interested if it were supporting your motorsport interest in some way versus, say, baby food. When you have the business domains narrowed down, then you can focus on the background required to get jobs in those industries.
You will find an endless set of recommended "hot" techologies if you search for them. I'm sure you can find a list, or post, which will confirm any bias you have on what to learn. But chasing the technology of the day may lead to an unfulfilling day-to-day job if what you're applying it to is not something you find interesting.
I would say that the answer depends on what type of job you want to do. The Fortune 500 company I worked at last summer had everything from mainframe c and cobol, java EE, .net to ruby on rails and python in applications. There are still alot of jobs maintaining legacy desktop applications. But the web atmosphere is obviously the future of business computing, and java EE and .NET are huge players in that arena. As for the project you are describing. I've done QT applications with python and there are python libraries for GTK that I've seen used to run apps in Windows. I've also used java swing and awt to build graphical applications and other than the learning curve for the layout system it works really well for building applications. I wrote a really basic windows application using visual studio and C# one time and that seemed to me to be very easy to write.
Enterprise level Java or .NET involve a fairly steep learning curve, so I would have those as a medium-long term goal rather than try and learn that tech immediately.
It seems to me that learning a high productivity web framework is the best way for you to go. "Ruby on Rails" seems to be a hot ticket at the moment. I've only had a small look at it, but it seems pretty quick and straightforward. Your drag racing app would be a good place to start.
Build a couple of websites for yourself using the tech. Then build a couple of websites for friends for a nominal fee. After that, see if you can find a real client (perhaps a local business). If you have 2 or 3 of those under your belt, then a potential employer will at least take notice.
One warning, though - people expect web sites to look nice. If you don't have good interface design skills yourself, it will be in your best interest to hire a designer to pretty up whatever you produce.
For a Windows desktop application, you can use C# and the various .NET APIs, and store your data in either a Microsoft-provided database, or SQLite, which is a reliable, server-free SQL implementation. (I don't know anything about Microsoft tech, hence the vagueness of my answer.) There is a lot of work available using C# and .NET, and it should be easy to pick up. You'll meet less resistance on the Windows platform with Microsoft's kit than with third-party languages like Python.

appropriate start on a Dentist Application

I have been planning to build a Dentist Application for the use of the Dentist to add patients(with medical profiles...), organize visits, manage balance/fees....etc
I know Java, .NET( C#) (some windows forms), and Python. Do you have any suggestions with the language I should maybe start with and the framework and IDE that will make my life easier (and help me finish in a good amount of time). This program will be connected with a database of at least 1000 patients...
IDE's I am familiar with : eclipse, Netbeans, and Visual Studio.
I want suggestions with reason explanations (why would you favor C# over Java ....compatibility....etc)
Thanks,
It's not the database side, or even the programming environment, that will be the issue for a dental practice.
I consult for a dentist friend of mine, and the opportunity arose to sell him a fully-functional contact/document management application to run his patient database.
In the end, I couldn't in good conscience recommend my own application, because not being designed for the dental sector, it lacks the specialised interfaces with dental imaging systems.
Databases, appointments, invoices, etc, are easy.
But what a dentist needs is something that integrates with the dental records themselves - the X-ray images of teeth. It needs a simple UI, easily usable by the dental nurse while she works with the dentist while he has his hands in the patient's mouth.
We could have written a suitable graphical interface to an image library (imagine a diagrammatic representation of the teeth in their relative positions in the mouth, linked to the images themselves), but it wasn't worth it - especially as there are several highly specialised dental packages around already.
I suggest to start with some research on the subject (the dentist domain) and to make a decent functional design before you start to think about IDE's and languages.
And then try to figure out some other things:
For instance, will you make a SAAS or a windows client, do all your customers have internet access. Iis the sensitive patient data allowed to be stored on the web.
I believe that question is very relative to the person programming. I think as the developer you have to figure out where you would be most successful at or what you want to get out of the project. If you are using this project to make money then do what you are comfortable with. If you are using it to better yourself as a developer then pick a language you are less confident in.
The one thing I want to add, is remember PHI (Protected Health Information). So, you have to have patient privacy in mind when building an app like this.
If it were me... I would write something in .NET and use Visual Studio which works very well for windows forms. Windows forms would work very well in an office environment.
Just my 2 cents.
First introduce yourself to the business knowledge. Healthcare programs aren't written overnight and you have to take into account that you need to have a very secure application and probably also need to keep years of information (the program I was involved in in 2001-2002 had to keep 30 years of patient history due to Belgian law).
Choosing the technology is actually entirely up to you: what are you good at? Can you find already prebuild pieces of code or controls ...
You can write such an application in any of the languages you have mentioned.
Research the features you will need and the support you can expect from each language and the different available libraries.
You need to come up with a good design first (regardless of language/platform), and make sure you have all the requirements - how many people should be supported in the system, how many concurrent users, privacy of data, security features, access patterns etc...
You should probably use the language you are most comfortable with, in particular if the features you require have similar support in the different languages/frameworks.

Sharepoint as a replacement for N-Tiers Applications and OLTP Databases

All,
At my current company, we are looking to replace all ASP.NET Applications and OLTP databases with Sharepoint 2007. Our applications and databases deal with 10,000+ rows, and we have 5,000 + clients actively using the system. Our Implementation of sharepoint would replace all n-tier applications.
Does anyone have an experience in implementing this? My current viewpoint is that Sharepoint is not built for or adequate enough to handle this type of application. Can it really replace application with hundreds of pages, and hundreds of tables? Support Data warehousing operations? Support high performance OLTP operations? Provide a robust development environment?
Any and all input is greatly appreciated. Thanks S.O. Community.
SharePoint can absolutely handle this this level of data and users. But I'd have serious concerns though about whether the people in the organization can adequately manage, develop, and use such an implementation. There are hundreds of wrong ways to do things in SharePoint, and very few "right" ways.
At the level of usage you're talking about, you're going to have to do some serious customization and development. You'll have to be careful that people don't get fooled into thinking it will work for them out-of-the-box.
SharePoint is a platform, like any other, it has strengths and weaknesses and can be made, through various levels of effort, to do anything you really want to with it.
Can SharePoint handle the load you ask about? Without a doubt. Can it support your data back end? Sure, either via the "SharePointy" mechanisms of the BDC/BCS, or though your own custom code.
The better question is what is to be gained from essentially re-developing all of your applications on a new platform, if anything?
Don't be swayed jump on the SharePoint ship because Microsoft is selling it as the new shiny. A thorough knowledge of ASP.Net is required for development in SharePoint, but having that alone doesn't allow for a rapid start-up in development.
https://stackoverflow.com/questions/256407/what-are-your-biggest-complaints-about-sharepoint
How good/bad is sharepoint programming?
Basically not a good idea to shift to sharepoint. Difficult to use. Steep learning curve. You would probably need sharepoint consultants.
update: Developing a website for 3 mln. users: SharePoint OR pure ASP.NET?
Sharepoint CMS vs UmbracoCMS
might be more relevant to you.
Also you may want to look at Running away from SharePoint (just kidding)
Thanks all for your answers!
After reading all of the feed back, it seems to fall in line with my research. Having said, here is what I gather from your responses:
SharePoint out of the box is a CMS.
SharePoint Lists do not replace relational tables.
Extending SharePoint to fill other uses is limited to custom development within the SharePoint framework.
From my research:
- Utilizing a relational database in a SharePoint application is done through custom code. Adhereing to point 3 above.
- Developing and building applications in SharePoint, with features that fall outside of the CMS domain , nullifies many sharePoint features and requires heavy custom development.
Again, thank you all for your feed back, this ihas invaluble to my research.
Here's some info on Sharepoint capacity planning: http://www.microsoft.com/resources/documentation/wss/2/all/adminguide/en-us/stsb07.mspx?mfr=true
It suggests that more than 2000 items per list would not work.
For posterity , and anyone else who stumbles here.
Further points:
- Most Developers do not have enough SharePoint Development Knowledge to properly implement a solution with SharePoint.
- ASP.NET Knowledge is required to develop SharePoint applications.
- SharePoint Maintains a step learning curve.
Are we saying that developing on a platform built on top of ASP.NET is harder to learn then ASP.NET it self?
Ouch man, I don't know if you want to head down this path; SharePoint has a pretty notorious learning curve, isn't something easy to bend and flex too much.

Live UML Editors

Are there any UML tools that show live updates?
I'm trying to have a design session online where all participates in their turn can change the design and add their own thoughts.
I prefer desktop solutions but online tools can work as well.
How would you suggest to do this?
EDIT:
I'm talking about something like this but maintained.
A co-developer told me it doesn't really work well and it's very buggy.
I know that Sparx Enterprise Architect includes live discussion forums that are linked to the model, so one can discuss individual parts of your UML model. In addition, although I haven't done this myself, I know model files are based on a database, and can be updated simultaneously by multiple users. This is either a Jet database for the lower-level versions, up to an Enterprise-level database for the Corporate editions.
I'm pretty sure it updates pretty much immediately, though i can't testify that I've seen it happen: I've always been the lone modeler!

What is fatwire from programmer perspective?

What open source toolkit does fatwire compare to and are there some particular advantages to fatwire?
How hard is fatwire to export out of and move to a free alternative?
How stable is it as a platform to write java extensions on?
From a development persepective, FatWire can be unfriendly. Having worked on a number of sites using this application it can easy bloat, and become difficult to maintain.
From a user perspective there has been alot of effort in the UI and this has led to a highly functional tool.
From a client perspective all clients bar 1 (a large news agency) were happy with the end result. FatWire can slow when using complex logic to generate menus or breadcumbs for example or when you have a large amount of content. This is the main reason the one client was unhappy. The FatWire site regularily struggled under the load. It sometimes seen as a solution to all web needs.
As such FatWire succeeds in serving Static Content & Semi Dynamic content, but can flounder when forced to do fully dynamic sites (from my experience).
From the original press release:
FatWire Software announced the rollout
of FirstSite, which is a set of tools
and best practices that helps
companies using FatWire Content Server
get their first Web site or
application running quickly while
providing a foundation for future
expansion. FirstSite includes a
collection of standard templates and
site components that are common to
most sites, combined with
documentation, training, a rich
developer community, and best
practices methodology. FatWire and its
solution partners are using FirstSite
as the basis for developing
content-centric applications for
specific vertical markets. With only
minor, cosmetic alterations,
developers can use the code in
FirstSite to implement a first site,
while simultaneously learning how to
utilize Content Server's capabilities,
such as dynamic content delivery,
personalization, caching, and product
catalogs.
Firstsite is not a product, unless this has changed since 2004 (unfortunately I cannot look, since their developer site is down). Fatwire's Content Server does not compare to any Open Source CMS that I know. It's scope goes much further. I will answer your questions one by one:
Advantages - There are many (or nobody would buy it, and it is not cheap)
On the delivery side: scalability, fine-grained cache control, stateless servlet architecture, ....
On the back office side: virtually no limit to asset types, dynamic content attributes, find-grained security and access control, ...
On the development side: Intelligently architected API with good coding productivity, tag library, ...
Openness
You cannot easily expect to migrate content between any two CMS products, open source or not. While there are ways to extract contant from the database in XML and other forms, using product tools, or simply at the database level, I don't think that this can be an argument for or against using a particular CMS. Ever tried to migrate from Drupal to Joomla?
Stable
I worked on several Fatwire implementations from 2000 to 2004 (back then it was OpenMarket Content Server, then Divine Content Server). It was stable enough for the Washington Post, the New York Times, and the S&P sites, and I would expect stability not to be an issue today.
Fatwire is really unique concept from developer point of view. It builds everything on a very abstract, extremely flexible clever asset modeling framework which is stored in relational database.
Application logic is based on "templates" which actually are pieces of JSP code. This JSP code is not like conventional Java, but tags instead. It takes very long from a developer to learn these tags and Fatwire asset api. Expect even months before skilled develpers start to be productive.
Almost nothing useable samples ships along the product. There is advertized "FirstSite" but it is way too simple for the purpose this product is used normally (huge complex sites). So pretty much everything has to be built from scratch.
Cache control is advertized to be one powerful feature. Yes it is, but we had extremely long learning curve and it never worked exactly like one assumed.
Wysiwyg editing has been missed from this product even it is advertized. At least during 2009 it had serious conceptual problems which practically prevented using it in live environments. But it was cool feature for demos and marketing of course. Today it might be fixed.
As a summary and if I were a customer with limited budget, I'd select any open source alternative instead. Mostly because development costs with Fatwire are high due the uniqueness of the product, lack of good documentation and extremely long learing curve. Of course the product price tag is also thing to consider.
And to answer to questions: you have to start from scratch if you move from Fatwire 6.0 to any open source alternative. And it is stable to build Java extensions on.
Fatwire stores content in relation database and file system. Depending on what type of content (structured/unstructured), Fatwire can be evaluated.

Resources