N a few years ago, Microsoft posted ten necessary tools on the. Net Website. N years later, many things have changed and the list seems outdated. In addition, this article only gives an independent introduction to the Ten tools. It seems a bit like a list. Is every tool equally important? Is there a link between the tool and the tool? And so on.
Here, I want to repeat an updated and more practical weapons inventory from another cliff. The update is because there are many tools/framework libraries that have come out in the last few years. More practically, it is because my own project is completely dependent on use.
Visual Studio
This seems to be self-evident, but also from a rigorous perspective. In fact, there is also an open-source IDE development environment which is also well developed, called SharpDevelop. I did not read it carefully and did not dare to comment. The Resharper that I will talk about later also forces me to only use.
Resharper --- essential for refactoring
Resharper is a powerful tool in terms of its name and actual functions. Once you get familiar with it, you can no longer leave it. I switched jobs last year, most of the reason is that the original organization did not allow me to use Resharper. I have repeatedly asked me for several interviews. Until the latest version is 6.1, Resharper is already a versatile player. In the early days, it was just a refactoring tool, and now it is an anti-compiler (the original Reflector. net), a Code review tool (Code specification Review), a Code generator (Code Smith cannot be used again), and finally, it is used by the organization of keyboard shortcuts, it is extremely beneficial for operations without a mouse. In a word, Resharper can greatly improve the encoding efficiency, and its powerful tool is also a tool.
Fluent nhib.pdf --- mandatory for domain-driven DDD
This weapon is actually divided into two parts: Fluent and nhib.pdf (this is not nonsense ). NHibernate knows a lot about people, that is, an ORM tool, and little is known after the addition of Fluent. In terms of functionality, Fluent only adds an encapsulation layer on the basis of the original ORM tool, and provides APIs using nhib.pdf in the form of Fluent interfaces. But don't underestimate this package. In terms of user experience and efficiency improvement, Fluent nhib.pdf has an outstanding effect. In my personal experience, I used it only after Fluent nhib.pdf and liked nhib.pdf itself. This makes it a headache for most people to create a ing XML culture, which is replaced by all C # files and can even be completely omitted. It can be said that these two parts are a perfect combination. The latter provides powerful basic functions, and the former provides perfect interfaces for use. Isn't this a necessary element for a successful software? What is an ORM? No, you just need to search for it. I just want to emphasize that it is not only a function library, but also a powerful architecture design tool. From the perspective of architecture, it isolates the business domain from the data layer, making it possible to independently design the data model and business domain model. This has a profound impact.
NUnit + Machine Specification + Rhino Mock + AutoMocking --- essential for unit testing
Ah, no. When I used the last weapon, I suddenly introduced them. This time I sent four white packets. This also reflects the guiding ideology of writing this article, which is described from the perspective of development and usage rather than from the tool provider. The four suites are perfect! NUnit is a well-known testing framework that provides basic testing functions and concepts. MSpec encapsulates nUnit from the perspective of BDD. It can also be said that it restructured the syntax to make the test readable and provide a good test organization structure. Then it can be tested, directly generate a perfect test result document. Rhino Mock is also a regular customer, but there are new ones in the old, and several new versions also add some new performance that can be circled, such as the so-called AAA syntax (Arrange, Action, assert, which fully matches the MSpec's Establish, Because, and It keywords ). From my perspective, the highlight is still the improvement in readability. Finally, the appearance of AutoMock makes things easier. Even the statements used to create a Mock object are saved, as long as you save the dependent class interface, declare the input in the constructor of the tested class, And AutoMock will automatically create a Mock object for you, just as its name expresses automatic Mock. Of course, there are also advanced applications.
SQLite --- essential for Integration Testing
What, databases? Yes, but here SQLite is not my product database, but its memory database for integration testing. It can be said that it is a powerful tool for integration testing. I \ O read/write has always been a performance bottleneck, and Agile programming is highly dependent on testing and is also a high requirement on testing performance. Even a unit test with a high coverage rate is still insufficient, and we still hope to be able to automatically run the integration test each time in CI. To have truly independent and clean integration/case tests, it is best to re-build the database and reset the test data for each test case. This requires that only memory data can achieve good performance. After using the SQLite card memory library, not only the set or server can complete the integration test with ease. Developers also run the integration test quickly locally. In this way, our agile processes include not only unit tests that must pass, but also integration tests. It is called a user story.
However, this tool has a small problem, because SQLite is developed based on C. For 32-bit and 64-bit systems, it has released two sets of controls, so you must follow your own platform, 3. Reference different Dll files. In addition, the VS project compilation settings must also specify whether it is x86 or x64, and cannot be set to Any CPU. For this question, I had a headache for a few days and finally found the solution. In use, since Fluent nhib.pdf is used earlier, no modifications are required except for the configuration. If you want to change it, it will not be a real integration test, will it?
Git --- essential for source code management
If you can write the code in one day, you don't need source code management. Can you? As a rookie in source code management, Git has developed rapidly. I am optimistic about it. It is its excellent underlying design and excellent business model. If you want to know what DDD is, Git is a very good example. Generally, source code management is based on version control of a single file, and the initial design of Git is to trace the version based on each commit (code file tree. You may disagree with me because many code controls still provide branch or version at the project level, which is actually just a fake image. The bottom layer of VSS, SVN, and TFS is file version control. On this basis, the project version function is provided. While Gif is the opposite. Is this important? Yes, the difference is very big. By referencing the idea of DDD, from the user's point of view, the code control version is based on the file tree. Why is your business model not? Therefore, I regard this implementation method of VSS and SVN as a patching/patching method. One day, I have completed the patch. In the end, I can no longer fix it. Another point is that Git is a distributed code management library.
TeamCity-essential for continuous building
Finally, the last one has been written too long. The writers are tired and the readers are bored. After I upgraded CCNet, the originator of the CI tool, to TeamCity, I felt different. Why CI? I don't think I can discuss it clearly in this short article.
The benefits of TC: first, commercial software is free, which is usually difficult to appear at the same time. Of course there is a limit. If you only make one compilation proxy service, this is enough for me. Second, it provides good support for many third-party tools. Such as nUnit, MSpec, and Git. The most important thing is that it is a CI server!