C# Pluggable Architecture, Consideration for a dissertation [closed] - c#

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
I am beginning a Software Engineering dissertation in which I have a dental practice as a client who I will be developing software for. The client has issues of requirements and the current software is constantly upgraded through patches.
Im trying to argue the idea that the underlying requirements are bad, and to develop a new piece of software that is able to mould to meet changes. I also want the software to be generic so it could be deployed to various dental practices who could customize it to toggle particular features on.
The idea I have is to consider each feature as a plugin. This way the application should simply host the enabled plugins and they could be toggled on/off, and upgraded invidually without the need of a hard change to the application.
I would appreciate if you could help me with the following questions I have:
Is this a good approach?
Is there a .NET framework already that caters for this well?
Are there any significant problems I should be aware of?
Sorry for the big intro guys, and I appreciate any response I get at all.
Many thanks
Mike

The Managed Extensibility Framework is built into .NET 4.0, and is available from CodePlex as a dll for earlier versions.

I know MEF as MS recomended framework for pluggable aplications, but maybe some IoC framework can helps you also. Recommended by MS is Unity (developed under Microsoft Patterns and Praciticies) unity on codeplex

I have used HTML, WinForms, ASPX, WPF, WCF, Web service, Silverlight, PRISM, MEF for applications in the last few years and my personal choices (given no restraints on a new project) would be:
WPF or Silverlight (Update: I would swing more towards WPF, now that Silverlight is no longer broadly supported)
WCF services
A modular framework like PRISM (which now includes MEF)
PRISM is the biggest gain as the components you build really are loosely coupled and modules can be developed independently without developers breaking each other's code.

For something specific like a dental practice hopefully you will be able to build a layer on top of general purpose plugin frameworks.
The plug-ins, and their container, should be specialized for the domain. The best way to identify what that that specialization should be is to enumerate several plug-ins that would be appropriate for this software, recognize what is common amongst them and abstract/represent them in your framework.
I know this is not very concrete but hopefully somewhat useful.

Related

Is WPF the best solution for C# GUIs? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
I was working with Windows Forms for a while now, and due to certain limitations on Forms, I want to work my way up to a better way of making GUIs. I found WPF, which looks pretty promising, but I'm asking you guys, if there are any better ways for doing nice GUIs for Windows with C#?
Thanks in advance!
I would look for MS roadmaps and instructions where they plan to drive the platform. For example:
.NET Technology Guide for Business Applications
This is since nov 2013 but still valid to a large degree. Among other things it states that (emphasis mine):
.NET Windows Presentation Foundation
 This is the preferred technology for Windows-based desktop applications that require UI complexity, styles
customization, and graphics-intensive scenarios for the desktop. WPF also takes advantage of XAML views.
And WPF development skills are similar to Windows Store development skills, so migration from WPF to
Windows Store apps is easier than migration from Windows Forms.
HTML5&JS-based apps is an alternate route but I consider it inferior for development efficiency and maintainability reasons. If you are a scripting fella, then it's worth a look.
By my experience WPF is definitely the way to go for desktop development.
There is definitely a learning curve migrating from Forms development to WPF, but in my opinion the effort is well worth it, and not simply because WPF is aesthetically different to Windows Forms.
WPF encourages you along the MVVM ("Model-View-View model") path and a separation of concerns between UI, logic and data elements. As an aside, MVVM is one of a number of MV* architectural patterns - there's some debate about what constitutes the difference between the different patterns, but consensus that separation of concerns is absolutely a good thing. For example:
http://www.infoworld.com/article/2926003/microsoft-net/exploring-the-mvc-mvp-and-mvvm-design-patterns.html
https://nirajrules.wordpress.com/2009/07/18/mvc-vs-mvp-vs-mvvm/
What is difference between MVC, MVP & MVVM design pattern in terms of coding c#
In terms of specific advantages over Forms, there's a lot of stuff you get out-of-the-box with WPF, like two-way data-binding and UI threading for instance. But I found that the change in thinking about problems is equally valuable; when I started thinking in MVVM, things like asynchronous programming (e.g. calling web services from windows-based client applications) just became much easier to conceptualise and reason about.
MV* is all the rage in web development, too, so the skills (and, in an ideal world, some of the code) are transferable to the web.

Getting started with WPF & Orchestra [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
I'm working on creating my first WPF application, whereas I have only used WinForms in the past. I've familiarized myself with the basics of MVVM, but certainly need practice to get a deeper understanding.
It seems like the Orchestra Shell written on top of Catel is a good way to start a new application as it has many built-in features including an MVVM framework.
The WPF application I'm interested in developing is a utility to help with administration (viewing logs, checking service status, etc) of a specific enterprise application and would include:
Fluent Ribbon
Avalon Docking
Ability for other developers to write plugins
As a WPF/MVVM novice, I'm having difficulty understanding the best way to get going with Orchestra, and it seems as though the getting started guide included in the docs folder on github is a bit outdated.
The examples provided as well as the LogViewer application are great, but I could really use some pointers with getting started. Does anyone know of an up-to-date getting started document for Orchestra, or would anyone be willing to provide some high-level steps?
Here are my preliminary thoughts on the steps required, but I'm not sure if this is the right approach:
Create a blank WPF project
Install Orchestra FluentRibbon using NuGet
Create a main view that contains the fluent ribbon
Create Prism Modules? for each component to be added to the
application
Example of components (Prism Modules?):
Connect/disconnect to application server
Load/show plugins
Any help/guidance would be appreciated -- perhaps starting w/ Orchestra is just not a good idea for a WPF/MVVM novice like me?
Thanks in advance!
The best way to start is to take a look at the examples that are included in the Orchestra repository. For example, the Fluent Ribbon examples gives you an idea how to implement the ShellService.
After that, if you are looking for modularity with Catel and Prism, I recommend that you take a look at the Catel examples repository.
If you have more direct questions, feel free to chat with the team of any of the components using gitter.

C++ QT vs C# .NET for Windows Development [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm currently having some analysis paralysis in deciding which is better for me between C++ using the Qt framework, or C# using the .NET framework for developing a small to medium sided project I currently designing.
I have a little experience in both languages, slightly more in C++ however would probably still be considered a novice.
All the information I have read has been relativity outdated (being at least a couple of years old) and was wondering if there have been any updates that would swing the advantage one way or another, or if it really is just a matter of preference.
QT seems to support my particular requirements needs slightly better however the additional difficulty of working in C++ may offset taking me back to square 1.
My requirements are fairly simple, I will need rich text support, database connections, the ability to export to various file types and have a fairly dynamic GUI.
Anyone have any personally experiences or recommendations they wish to share?
I recommend to use Qt because:
It's cross-platform and covers wide range of operating systems (including mobile)
Writing in C++ gives you the opportunity to use libraries
like the STL, Boost, etc;
Using C++ gives you the benefit of running your app at high speed
It is opensource and has a fast speed in getting better
It has the a nice GUI designer and a very capable IDE (Qt Creator)
The API design is excellent and easy to use
It has a great documentation which is easy to read
It has the Qt translation system which enables you to have a multilingual app
The GUI layout system where the widgets resize themselves according to a layout makes everything much easier
The QML gives you the power to create fantastic GUI with great graphics and animations
It has great support for networking and connectivity(socket, SSL, www, IPC, ...)
It has QTestLib for testing the code
It has many language binding if you don't want to use C++
You can learn Qt easily if you know C++
All requirements you have given are completely feasible and easy to do in Qt
It doesn't require any VM for deployment but .NET needs that.
Your application will be cross platform
Creating custom UI is very much possible in Qt. You can create almost any kind of UI in Qt.

Is there an open source .NET web form project using DI/IoC? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I am currently trying to get my head round DI and IoC.
Blogs and article are all well and good but I'd like to see some real working source code however I am currently stuck with web forms at work for the time being and most open source projects that I know of that are implementing these kind of development practices seem to be based on ASP.NET MVC i.e. nerd dinner.
Can anyone point me in the direction of an open source web form based project that uses DI/IoC?
The MSDN page for Unity contains a tiny web project. It might not be as big a project as you're looking for, but it's really clear and should help with understanding.
Take a look at n2 cms it's an open source CMS
I strongly recommend ninject and the guide that comes with it.
There are a few reasons why I make the recommendation. First, because it is how I learned about using actual IoC containers. Second, because the guide is very strait forward with examples using poor man's DI, to using ninject, to some of the really cool things you can do with ninject. Lastly, ninject is one of the easier to work with OSS IoC containers and it doesn't need xml configuration.
That said. Once you get confortable with ninject, make sure you check out Structure Map and castle windsor
Also get familiar with the singleton pattern, because it adds a lot of value to what you will need to do with inversion of control and without it, a lot of the IoC features may not seem valuable.
Once you have a feel for what an IoC container can be useful for, you will know where you can use one in your ASP.NET applications. As for specific examples, why not create one after you learn?
What about Spring.NET? I've used it successfully on ASP.NET (non-MVC) projects, it works very well. While I can't point you at a specific project which uses it, it is pretty well documented and has many samples.
Take a look at Sharp Architecture. It has a sample project (Northwind) withe DI
http://code.google.com/p/sharp-architecture/
Take a look at the Web Client Software Factory

C# Common Library [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 2 years ago.
Improve this question
I'm hoping to find an open source .net common library, but I'm having a hard time finding one.
What I'm looking for a is something that contains : Logging, Caching, String Manipulation, Config Reading, ext?!?.
Do you know if anything like this exists or is this more likely something that I will need to create myself?
Use Microsoft Enterprise Application Blocks
Get it from here
http://msdn.microsoft.com/en-us/library/cc467894.aspx
Source code here
http://www.codeplex.com/entlib
Microsoft Enterprise Library - Built by Microsoft, source code is available
Spring.NET - Open source development framework
Kev:
Just a bit more elaboration, I've spent quite a bit of time trying to reuse code from other frameworks:
Here is a breakdown based on feature sets:
Infrastructures frameworks( config, logging, caching, etc)
SpringFramework.NET - ( Port of the popular Java SpringFramework )
Microsoft Enterprise Library - Microsoft "answer" to SpringFramework.
Frameworks providing ActiveRecord or Ioc(Inversion Of Control) or Code generation:
Castle Project
http://www.castleproject.org/index.html
SubSonic
http://subsonicproject.com/
NetTiers
http://nettiers.com
Finally, you may find many other smaller libraries, frameworks on CodePlex.com
Some that are of note:
CommonLibrary.NET
http://commonlibrarynet.codeplex.com/
DotNet Commons
http://dotnetcommons.codeplex.com/
All that is built into the framework, so all you really need is mono.
Check Nido Framework too
Nido is a code framework, a common project, an architectural pattern, written on Microsoft .NET/C# 4.5, to help software engineers to develop their systems faster.
Other than automatically building/ architecting the back end code for you.. it also help you in
Handling of log-in exceptions, display user friendly messages, tracking errors.
Tracking changes done to important data items which is also called audit trails
Validating records and encrypting sensitive data to protect their privacy
Controlling complexity by mean of handling complex problems in one standard way
Set standards pattern for coding
Logging - have a look at Log4net

Categories

Resources