by BradA via Brad Abrams on 3/27/2009 5:03:00 AM
Today we have a guest post from Kit George who is the keeper of much of our internal Framework Design Guidelines. This is the stuff that Krys and I based a the book on. I asked Kit to post this internal information so you can get a feeling for what our guidelines are and why…. and so you can call us on it if we mess it up ;-)
As always, feedback and comments are welcome!
It is clear that there’s a bit of confusion over the namespace guidelines. Here is our attempt at make this clear. We know this will remain a contentious issue, but the goal of these guidelines is to clarify:
The .NET platform (which includes Silverlight, the full .NET Framework, the .NET Compact Framework, etc) continues to be that set of managed functionality, produced by Microsoft, that is for general application use. This doesn’t mean APIs that are guaranteed to be useful to every application (we can’t guarantee that), but APIs which can be used by many different application purposes and styles. These APIs may be shipped in different ways. There are other interesting questions that aren’t addressed by namespaces.
How does a user determine if an API is in Silverlight, but not in the .NET Framework 3.5? How does a user determine if an API is officially supported? How does a user determine if an API is usable on a device? These issues will be resolved using other mechanisms, not namespaces.
The following guidance comes out of this position and is used internally to help us follow the position.
Microsoft will use System.* for namespaces that are planned to be exposed publically and are considered part of the .NET platform.
Types that are part of the platform have expectations around quality, compatibility, consistency of design, and general usability. Types that are suitable for the platform portray the following characteristics: We expect the API to be used by a wide variety of applications Examples: string, central collections (List<T>, etc.), Linq, data
Types that are part of the platform have expectations around quality, compatibility, consistency of design, and general usability. Types that are suitable for the platform portray the following characteristics:
Examples: string, central collections (List<T>, etc.), Linq, data
The API may be specific to a high level, but part of a general purpose application model (Label, TextBox, etc.) Examples: Web, Windows.Forms, WPF The API is formed of common abstractions and primitives that allow higher-level components to communicate Examples: System.IO, System.Globalization The API has had considerable design invested and is well-factored, reviewed, and consistent with the system. Depending on the ship vehicle, the size and deployment impact will have been considered The API is finished and therefore, doesn’t require significant changes once publically available
Examples: Web, Windows.Forms, WPF
Examples: System.IO, System.Globalization
Microsoft will use use Microsoft.* for namespaces that are planned to be shipped by the team and are considered application or non-platform components.
This applies to APIs/namespaces that are:
Example: Visual Studio, Office, SharePoint
Example: MSBuild, Office Infrastructure APIs
Microsoft will use Microsoft.Experimental.* for namespaces that are seeking consumer input, but have no committed ship plan
At Microsoft, In order to ship a CTP of a feature, a team and divisional commitment to officially productize the API is in place. Nothing is final, but the conviction and intent is there. Prior to this stage, there is literally no commitment or plans to ship the API. Use Microsoft.Experimental.* to communicate to customers that the feature in question is long-lead and may not see the light of day. Once the team is committed to shipping the API and is working on a schedule, feel free to use the most appropriate namespace based on the purpose of the productized type.
Avoid changing the namespace of a type once you’ve decided to ship the type publically (once you’ve reached the Beta stage).
Changing the namespace from a Beta onwards is costly to consumers. This issue is absolutely secondary to getting the namespace right, but consider the impact when making such decisions.
Original Post: Framework Design Guidelines: the System.* namespace
The content of the postings is owned by the respective author. CSharpFeeds is not responsible for the contents of the postings. This site is automatically generated and cannot be reviewed for abusive content. If you find abusive content on CSharpFeeds, please contact us. Designated trademarks and brands are the property of their respective owners. All rights reserved.