tags:

views:

65

answers:

2

We're thinking about switching technology for our future projects going from C++ to Java or C#. So naturally there's a big discussion going on right now what to choose. The problem is that none of us has industry experience with EMF or RCP, which would be quite nice to have if it fits our needs.

so i wanted to ask you what you would prefer. our program is:

  • gui heavy (lots of dialogs, properties)

  • quite big models (serialized xml takes up about 15mb right now)

  • application should be integrated into our framework-application-center

  • data format (xml and binary) has to be the same as our current format

  • graphical editing is needed (creating, moving, connecting shapes + editing their properties)

  • lots of similar but tiny different objects in data model

and the actual questions are:

  • is there an equivalent to EMF in C#?

  • is there an equivalent to RCP in C#? (e.g. commands to edit data model, gui frontend, ...)

  • is the gui editing in RCP as good and flexible as with windows forms or WPF?

  • how rigid/flexible is EMF?

  • we've got lot's of interdependencies between data models (some control others or allow different options on them) - how would you model these?

  • what of the options would you choose?

thanks very much for any advice or opinions

manni

+1  A: 

I'm not familiar at all with EMF and RCP, but from what I gathered in a quick glance, there are cetainly 'equivalents' in .Net. However I'm heavily biased so don't take my word for it.

There are tools from generating data classes from xml/xsd and vice-versa (xsd.exe), graphical integrated modeling tools inside Visual Studio etc.

And there is WPF, which I highly recommend for any project (not just graphical-heavy ones); the object model is easy to work with, it has declarative GUI design (XAML), and it makes diagramming-like tools (like what you described) a lot easier to make compared to older .Net technologies like WinForms. Especially look into MVVM (Model-View-ViewModel) for the most wide-spread pattern when working with WPF/Silverlight.

Alex Paven
thx for the answer, i've had a longer look at wpf too some days ago, and it seems quite comfortable (except the blurry text rendering, which you have to get used to). The bigger difficulty is to convince the older established windows forms programmers to shift to wpf :) Can you recommend any modeling tools for visual studio that you have experience with?
Actually the blurry text issue has improved a lot in .Net 4 and there are some options to fine-tune it.As for modeling tools... Most of the time I get by just fine with what's built into Visual Studio (class designer, Entity Framework designer etc.); there are even more in the Ultimate/Architect editions of Visual Studio but I get by without them just fine (they're quite expensive). Tangible (http://www.tangible-engineering.com) also have some modeling tools but they didn't impress me that much. Visual Paradigm's (http://www.visual-paradigm.com) look better but didn't use them extensively.
Alex Paven
+2  A: 

As Java developer I can't say much about C#, but I can give you an overview about the Java side: There are sevaral good choices for RCP (the most prominent is of course Eclipse, but there are others as NetBeans). The learning curve is quite steep, but once you have the "hello world" running, it gets much easier. GUI-programming is no problem (you have several choices, and there exist a lot of free and commercial widgets), and you have several ways for dealing with XML. Generally for almost everything there is a (often free) lib. So if you like to have choices, Java is for you.

On the other hand the C# language is technically ahead. Java7 could decrease the gap, but won't close it, that's sure.

If you want to have both the advantages of the JVM (open, widespread, platform independent, plethora of libs...) and the advantages of a modern language, then you should have a look at Scala (you can mix Scala and Java code without problems). Scala is very innovative, mixing OO and functional features, but is still very "accessible" for programmers that are used to a C++/Java style syntax.

Landei
and thanks much for the java side too. when changing to java we will most certainly stick to java itself and don't go for scala.I've had a look at some tries and tutorials to glue gmf-rcp-emf together, where the connection between gmf and rcp seems the trickiest. does anybody work with all three techniques together? (or use rcp with emf together?)
The biggest difficulty we see with using java is to integrate the app into our application framework, which will still be in c++. Currently we've got an application center app, in which the windows of the sub-applications are docked, it will be hard to get such a tight integration between a java program and a c++ framework app. Since this is a "must" requirement we'll have to find some way to do it. additionally we use a dongle lib, for which we need to use the jni. Additionally writing windows services (which will be needed too) may be difficult in java.