Crazy idea-idea of A. Net-based software supermarket platform and its 5-year implementation

Source: Internet
Author: User
In 2005, I developed a small Component Based on. NET 2003. This component aims to solve the problems of modular development and module reuse. I named this component "common form framework". It aims to allow each developer to develop their own modules independently and directly focus on the business modules, then, you can quickly integrate the business logic forms developed by all developers into this component through configuration.

 

Shows the idea of this component. This component provides an empty form such as "2". Each developer can add a module function to an empty form by writing an xml configuration file such as "1, finally, it is combined into a software product as shown in "3.

 

The successful application of this component was developed by nine people and lasted for one year. Its idea is similar to Microsoft Composite Application Block, but it is not as powerful as cab.

 

After referring to the cab and more application systems, I found that this component has many disadvantages, such: modular definition is not standard enough, interface elements cannot be expanded, module interaction is very complex, function reuse is low, cannot be applied to web or other application environments. For this reason, I have referenced some functions of cab and scsf and designed a commom UI Platform specification in 2007 to design a more powerful and simple modular rapid development platform.

 

However, in 2008, I had more ideas and proposed a uishell product concept. Uishell is the abbreviation of the English user interface shell ". It is composed of a software template framework. It consists of the framework layer, service layer, shell layer and System Module layer, providing uishell-based software design and development specifications. Shell is the main interface of the application system. It consists of extensible Interface elements (such as menus and toolbar) and replaceable interface elements (such as display area, as shown in.

 

There are two types of users for this product: (1) developers-this product can provide developers with a modular design specification, a general interface framework and a General Service, this allows developers to directly design business modules without the need to care about the software interface and user experience. (2) end users-end users do not need to purchase any software, you can download the required interface framework and application modules from the software supermarket based on the platform, and then assemble them into the final software.

 

In my opinion, the idea at that time was indeed a bit crazy, because I thought it was too simple and too ambitious (however, sometimes it is really necessary to do something crazy ,:)), but I wouldn't even realize that. I set up a uishelldev team. I'm proud to tell my team, "Once we implement uishell, we may be able to open up a new direction for the software industry and contribute something to it ".

 

So we started the uishell product Road. We learned Enterprise Library, scsf, sharpdevelop, egeye addin, MAF, MEF, and so on, and analyzed the scsf source code and SD source code, I learned framework design guideline, followed every new product, and analyzed the competitive advantages and disadvantages (such as Google App Engine, Sina App Engine, and MEF, we cannot develop a product that is useless and out-of-date for developers, so we must always be vigilant ), developed product development specifications-"user scenario design specifications, Requirements Specifications, design specifications, quality assurance systems, etc "...... This product design goal is "Easy to use" as the primary goal, which means that we should first consider the user for any function, and simulate the user's behavior habits to constantly optimize the product design. However, this road is not as easy as I expected. I thought this product should have been launched by the end of 2009. During the design process, the problem was solved one by one. Because our team is a part-time employee, the progress was much slower than I expected. More importantly, the idea was based on scsf. scsf was too complicated to meet our needs. By chance, I got in touch with the osgi specification and used my spare time to translate the osgi specification. After reading osgi, I noticed that this is what I want. However, osgi is based on Java specifications. Due to the differences between the. NET platform and the Java platform, we need to design a specification that complies with the. NET platform. So we designed osgi by ourselves.. Net specification. When designing this specification, we borrowed the osgi specification but adjusted its goal, that is, osgi. net positioning is a satisfying. net in different application environments, it implements osgi modularization and plug-in, service-oriented, module extension and security functions.

 

Osgi. Net specifications and interface design was completed by the end of 2008. I remember that when I completed the design, I was sending the design drawings and specifications to uishelldev team in Dublin, USA by email. This is the first draft of this specification. In the following days, we constantly refactored the design, finally implemented the kernel prototype in March, and completed the final design draft of osgi. Net in May. Of course, in the reconstruction process, other team members have begun to design. Here we designed a modular runtime that can be used in a variety of. Net runtime environments, which implements all the features of uishell products and remains easy to use. We have independently designed modular specifications, module runtime class loading specifications, SOA specifications and expansion specifications, and development and debugging specifications. However, it is difficult to make a decision in the middle, because ASP. NET, unlike winform, WPF, and console, must be hosted on Web server. So our argument is: Is it iis host module running or module running? If the module runs on IIS, it has full control, and communication between the module running on IIS and other modules is not enough, because this is cross-process communication. If the iis host module runs, the module runs passively. The final result of the discussion is the adoption of the second scheme because of its high performance and simplicity. When the final draft design is completed, all problems in the product design will be solved. We put all our energy into implementation.

 

At present, the uishell product design and implementation have come to an end, which means that the basic platform of the software supermarket has been basically built. The osgi. Net kernel we have implemented can successfully host in different. Net environments, and the design ideas and development ideas of various environments are completely consistent. In the future, the software supermarket will have shell modules, general services and application modules in different environments, so that users and developers can download and assemble software, you can also contribute to your own development.

 

We also need to mention the construction of the Quality Assurance System in the implementation process of uishell products. In fact, at the initial stage of product design, I very much hoped that everything could be improved, including the quality assurance system. At that time, I was a perfectionist. However, we do not have enough resources to support "perfection ". In this process, I learned how to compromise and "moderate software". We can only put limited resources into the most needed places. Besides, the goals of each stage are different. Of course, we have built a simple and effective quality assurance system based on "Subversion/totoisesvn/ankhsvn + cruisecontrol. Net/Nant + bugtracker. Net. Subversion provides configuration management functions similar to clearcase and is an open-source free product that provides powerful branch/Tag management, branch/tag was my first requirement for selecting a configuration management tool at the time, which is a required feature for product line management. Cruisecontrol. net/Nant is used for continuous integration. It is automatically built when every code is updated. We can see whether the product line is healthy. In addition, there is a very important function, we can build a new installation package for testing at any time. Bugtracker. NET is also an open-source defect management tool. We can create bugs at any time. It sends an email to the team every time the bug is updated. It provides powerful defect statistics management. In the bug fixing stage, we can easily arrange all bugs that need to be fixed at different stages of the product, or count the workload of each person. Of course, we also perform bugtracker as needed. net has been improved, mainly including two: (1) when the code is submitted, the bug status automatically changes to check in and sends an email; (2) added the code audit function, you can easily generate code audit packages for each bug so that we can conveniently view the changes made to each bug. The following is an example of a bugtracker. Net email notification.


 

 

Currently, the uishell kernel product consists of the installation package project, vs plug-in project, remote console project, osgi. Net project, SAAS project, Web extension project, Shell project, test project, and help project. As long as the following methods are used to run the Host module in different environments, this environment has all the features of osgi. net. Currently, the tested environments include the console, winform, and ASP. net. Next, we will release the first version after completing the documentation and sample. In the next version, we will implement integration testing for more environments, improve products, and build a software supermarket website. In addition, we will build an SaaS store, but this is another product. I will introduce our SaaS store products later. Finally, I would like to thank all the members of uishelldev team for their great efforts in building the product and put forward many ideas of building significance. This product is the crystallization of a team. During the product R & D process, we experienced the strength of Team 1 + 1> 2. Without their efforts, uishell products cannot be implemented, let alone other ambitious ideas. Every time I think of the details of the team's development process, I am very proud and touched. These people are really nice!

Namespace simplebundleshell

{

Class Program

{

Static void main (string [] ARGs)

{

// When modular Runtime is started, it will automatically load all modules from plugins

// And start them. Here, a module is a common. Net project + manifest. xml.

// Therefore, the development of a module is exactly the same as that of A. Net project.

//, We do not need to learn new knowledge.

Using (bundleruntime = new bundleruntime ())

{

Bundleruntime. Start ();

 

Console. writeline ("press enter to exit ...");

Console. Readline ();

}

}

}

}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.