<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx</link><description>There is an interesting discussion on the BCL blog about a new BCL type called TimeZone2. Just take a look at the comments below the System.TimeZone2 Starter Guide post. The new type supersedes an existing type called TimeZone (which is obsolete now).</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Naming Guideline Discussion</title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#799025</link><pubDate>Sat, 07 Oct 2006 03:54:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:799025</guid><dc:creator>Kathy Kam</dc:creator><description>Yeah.. Krzysztof have finally blogged about the controversal naming guidelines around TimeZone2! Check</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#799140</link><pubDate>Sat, 07 Oct 2006 04:37:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:799140</guid><dc:creator>Haacked</dc:creator><description>&lt;p&gt;How about TimeZoneRegion?&lt;/p&gt;</description></item><item><title>TimeZones</title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#799190</link><pubDate>Sat, 07 Oct 2006 05:08:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:799190</guid><dc:creator>Community Blogs</dc:creator><description>&lt;p&gt;Right now, there is no easy way to convert a time from one arbitrary timezone to another arbitrary timezone&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#800008</link><pubDate>Sat, 07 Oct 2006 15:21:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:800008</guid><dc:creator>Omer van Kloeten</dc:creator><description>I remember the highlighted paragraph from the (excellent) FDG book (which I own and recommend as one of the first books to read before starting to design applications in .NET) as one of the very few paragraph I wholeheartedly disagreed with.

I'm with the first camp that calls 'Break! Break!' and I think that this is the best option, considering how .NET's handling of assemblies and deprecation by ObsoleteAttribute is supposed to work.
Walking on your tippy-toes in _every_ situation in an attempt not to break _anything_ would, a few years down the line, result in an unusable patch-work. Some things you can't see down the line and sometimes you have to get back to the drawing-board to re-define something you though would never change.

Think about someone new to the framework 3.0 who encounters TimeZone and TimeZone2. That just seems ridiculous.</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#801046</link><pubDate>Sat, 07 Oct 2006 19:57:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:801046</guid><dc:creator>Josh Einstein</dc:creator><description>Totally cheap. .NET has jumped the shark. I hate the new name.</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#801661</link><pubDate>Sat, 07 Oct 2006 23:16:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:801661</guid><dc:creator>Henry Boehlert</dc:creator><description>Since Kathy's article mentions a relationship to the new Vista API and looking at her example #4, TimeZoneInformation sounds like a feasible alternative to me.
However, Information is probably one of your black-listed suffixes, isn't it?</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#807972</link><pubDate>Mon, 09 Oct 2006 16:02:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:807972</guid><dc:creator>Micael Baerens</dc:creator><description>I'm one of the people who wrote a comment on making it a breaking change.

I don't argue that making a breaking change will hurt some people, but I think this is an investment in the framework in the long run. If we look ahead 10 years, will .NET be littered with TimeZone9 and X509Certificate6? Will we still want to use it?

You say that you cannot introduce breaking changes due to policy, yet .NET 2.0 introduced many breaking changes? So has the policy changed - are you saying that there won't be a single breaking change in .NET 3.0?

I think you should have the courage to realize that this /should/ be a breaking change, and that you will be better off taking the hit now, than letting developers suffer for it in the many years to come.</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#808613</link><pubDate>Mon, 09 Oct 2006 20:43:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:808613</guid><dc:creator>Damien Guard</dc:creator><description>If Microsoft are going to choose backwards compatibility over a clear sensible evolving API we are going to be  in the same scenario as Win32 is now within a few years.

I'd go with giving the new class the TimeZone name and moving the old one to a .Obsolete namespace (for 1 version only) and adding the Obsolete attribute to it.

The VS 200x project upgrade wizard should detect references to the original TimeZone class and switch them to System.Globalization.Obsolete.

If Microsoft aren't prepared to break the underlying API between major revisions .NET is going be become a mess real quick.

Where they want to support an old version of a class for some time then an old-API wrapper round the replacement class might also be an option.

[)amien</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#809477</link><pubDate>Mon, 09 Oct 2006 22:17:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:809477</guid><dc:creator>kcwalina</dc:creator><description>&lt;P&gt;We recognize the problem of frameworks deteriorating over time and we look for ways to stop or reverse this process – but without resorting to breaking changes. For example, in 2.0 we added type forwarders which we plan to use to fix some of the layering/dependency issues. We are also thinking about technologies that would allow us to fix naming and design issues without resorting to breaking changes.&lt;/P&gt;
&lt;P&gt;Breaking changes are just too disruptive for many projects/customers and they almost never add enough value to be worth the pain. There are cases where we feel like the benefits outweigh the costs (for example changes required to fix security issues) and we do approve limited breaking changes in such cases. But, I would assert naming changes for hygiene reasons can never provide enough value to offset their cost.&lt;/P&gt;
&lt;P&gt;This is especially true in Orcas. Orcas is an in-place (not Side-by-Side) update to the .NET Framework. See the following blog describing more detail: &lt;A href="http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx" target=_new rel=nofollow mce_href="http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx"&gt;http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx&lt;/A&gt;. Changing TimeZone APIs in Orcas would amount to breaking applications in a service pack. This is a big no-no.&lt;/P&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#812829</link><pubDate>Tue, 10 Oct 2006 17:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:812829</guid><dc:creator>Diego Canepa</dc:creator><description>Hi Krzysztof,
I've a name suggestion, what about calling the new type "TimeRegion"

Cheers</description></item><item><title>When there is no good name...</title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#813352</link><pubDate>Tue, 10 Oct 2006 19:08:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:813352</guid><dc:creator>ASP.NET Team Blogs</dc:creator><description>&lt;p&gt;I noticed a good debate going on the BCL blog (and now Krzysztof Cwalina’s blog) about the naming of&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#814106</link><pubDate>Tue, 10 Oct 2006 23:05:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:814106</guid><dc:creator>Adam Jones</dc:creator><description>I honestly don't understand the problem with a breaking change...when you publish the next .net version ... the dll version numbers are different, it shouldn't break anything published unless you try and recompile...and if you are recompiling...its not such a big deal particularly for such a non impacting class.
If you went and changed the interface on string ... ok perhaps you have an argument...but otherwise ..what is the problem? Change happens, and from what i have seen of timezone2 .. the change is a good one.  Don't screw up a positive change with a confusing migration....and yes it is a migration because you are going to eventually get rid of system.timezone, so the code changes need to be done anyway...all you are doing by adding a 2 to the name is making it harder for programmers to find the right classes, which doesn't help anyone.

If you feel so compelled, please do include a framework API migration wizard in the next release, but keep the API name the same.</description></item><item><title>Should Humans Be Called Ape2?</title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#814127</link><pubDate>Tue, 10 Oct 2006 23:17:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:814127</guid><dc:creator>Omer van Kloeten's .NET Zen</dc:creator><description>&lt;p&gt;Ever since Kathy Kam announced on her weblog that a new type named TimeZone2 will be introduced into&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#814828</link><pubDate>Wed, 11 Oct 2006 00:51:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:814828</guid><dc:creator>kcwalina</dc:creator><description>&lt;p&gt;Diego and Henry, I forwarded the suggestions to the BCL team. I actually talked to Kathy and she pointed me to the following blog which describes tradeoffs related to many of the names people suggested. See &lt;a rel="nofollow" target="_new" href="http://blogs.msdn.com/kathykam/archive/2006/10/06/Naming-Guideline-Discussion.aspx"&gt;http://blogs.msdn.com/kathykam/archive/2006/10/06/Naming-Guideline-Discussion.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adam, we are not changing version number in Orcas. This is basically the distinction between in-place and SxS. Also, even if we were doing a SxS release, it is a big deal for many people when they recompile and find a ton of errors. Migration tools cannot migrate everything. Also, there are various publisher policies which by default run applications on the new SxS release. Anyway, this whole compatibility discussion is probably a good topic for a blog post. I will ask around maybe somebody has already written on this, if not, I will try to write something.&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#816364</link><pubDate>Wed, 11 Oct 2006 10:36:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:816364</guid><dc:creator>Micael Baerens</dc:creator><description>&lt;p&gt;When I read the design guideline, it says use numeric suffix &amp;quot;if the existing name of the API is the only name that makes sense&amp;quot;.&lt;/p&gt;
&lt;p&gt;But &amp;quot;TimeZone&amp;quot; isn't the only name that makes sense - there are many names that make sense...&lt;/p&gt;
&lt;p&gt;You could name it TimeZoneInfo as suggested in Kathys blog comments.&lt;/p&gt;
&lt;p&gt;You could name it after the reason you chose to create the new class - for instance if the main purpose was conversions it could be named ConvertibleTimeZone.&lt;/p&gt;
&lt;p&gt;So by your own admission you cannot apply this rule, and as such it must not be named TimeZone2... *yesss! SCORE!* ;-)&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#816649</link><pubDate>Wed, 11 Oct 2006 12:14:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:816649</guid><dc:creator>urig</dc:creator><description>&lt;p&gt;Dudes, TimeZone2 is an attrocious name for a class. We've been through this before with COM and it's been a nightmare. Names need to be descriptive. Including a version number describes nothing about what the class does.&lt;/p&gt;
&lt;p&gt;If the new class cannot replace the old TimeZone then it should have a _significant_ name that explains why it's different. Ex: DynamicTimeZone, WorldTimeZone etc.&lt;/p&gt;
&lt;p&gt;There's nothing wrong with breaking the 3.0 codebase at this time. It's still very far from release.&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#816829</link><pubDate>Wed, 11 Oct 2006 15:37:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:816829</guid><dc:creator>Clayton</dc:creator><description>&lt;p&gt;I'm going to add my 2 cents in as well and say &amp;quot;Bad BCL team! Bad!&amp;quot;&lt;/p&gt;
&lt;p&gt;You can use all kinds of logic to say why TimeZone2 should be used. But when it comes right down to it, its still stupid. How does the quote go? &amp;quot;Logic is nothing more than a way to err with confidence.&amp;quot;&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#817011</link><pubDate>Wed, 11 Oct 2006 18:16:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:817011</guid><dc:creator>kcwalina</dc:creator><description>&lt;p&gt;Micael and urig, I will pass your proposal to Kathy. She owns TimeZone naming.&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#818232</link><pubDate>Thu, 12 Oct 2006 06:36:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:818232</guid><dc:creator>Judah</dc:creator><description>&lt;p&gt;Dear Lord! Please, please, please don't do this to the BCL. Think of a different name, please! Your customers obviously cannot stand the appending 2 to the class name. Please don't do this, please use a different name. I beg you.&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#837538</link><pubDate>Wed, 18 Oct 2006 05:21:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:837538</guid><dc:creator>TAG</dc:creator><description>&lt;p&gt;&amp;gt; I don’t like fully qualifying core types when I program and usability studies we conducted have shown that I am not alone. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;using System;&lt;/p&gt;
&lt;p&gt;using TimeZone = System.Globablization.TimeZone;&lt;/p&gt;
&lt;p&gt;Done !&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#838266</link><pubDate>Wed, 18 Oct 2006 11:21:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:838266</guid><dc:creator>Anders Borum</dc:creator><description>&lt;p&gt;I have to agree with the comments on adding a &amp;quot;2&amp;quot; suffix is a bad decision. Especially the comments by Micael Baerens are interesting. There's a number of other suggestions for names.&lt;/p&gt;
&lt;p&gt;The in-place installation is, however, an issue and this just adds to the arguments that .NET 3.0 should not be named .NET - rather .NET 2.1 (or 2.5) for what it is (.NET 2.0 with WinFX).&lt;/p&gt;
&lt;p&gt;Releasing the new version of the BCL as a side by side installation would allow you to make the breaking change now and use the &amp;quot;obsolete&amp;quot; features to inform developers about the new class.&lt;/p&gt;
&lt;p&gt;Already mentioned in other comments, the .NET 2.0 framework made several changes (some breaking). The changes to the Xslt namespace is a good example. The addition of compiled transformations forced a lot of people to update their code.&lt;/p&gt;
&lt;p&gt;Were the developers angry with this decision? no.&lt;/p&gt;
&lt;p&gt;Were the developers positive towards the investment Microsoft made in the BLCs? definately yes.&lt;/p&gt;
&lt;p&gt;It is extremely positive that Microsoft shows more transparency, allowing us - the developers - to comment on the decisions. We're hoping it makes a difference (hint hint) :-)&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#841293</link><pubDate>Thu, 19 Oct 2006 02:21:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:841293</guid><dc:creator>TheMuuj</dc:creator><description>&lt;p&gt;I agree that a way to rename a class without breaking versioning would be nice. &amp;nbsp;I've thought about this before, and the only con to it would be possible confusion in the documentation. &amp;nbsp;If somebody looks up System.TimeZone in the help file and finds a listing for a completely different class that could be a problem, but not an unsolvable problem.&lt;/p&gt;
&lt;p&gt;So in case you're considering a feature like this, count me in as a supporter. &amp;nbsp;I don't see how we can get this in time to solve the TimeZone/TimeZone2 problem (it'll have to be a major version update to support the new versioning capabilities). &amp;nbsp;But still, it'd be nice to think that someday after TimeZone has been obsoleted for a while we can rename TimeZone2 to TimeZone and TimeZone to _OBSOLETE_TimeZone without making any binary breaking changes.&lt;/p&gt;
&lt;p&gt;I'm not entirely sure how Reflection would work with type-renaming (I'm not sure what it does with type-forwarding), but if you have a way to see what version of a library an assembly was compiled against then I'm sure there's a solution that would work.&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#1042859</link><pubDate>Thu, 09 Nov 2006 08:54:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1042859</guid><dc:creator>Jules</dc:creator><description>&lt;p&gt;Having built my own TimeZone class for a very large international law firm (because the System.TimeZone class is ridiculously short-sighted), I have done a lot of research about time zones and daylight saving time around the world and am very interested to see how this plays out.&lt;/p&gt;
&lt;p&gt;I've been reading a lot of comments in several blogs about the TimeZone2 proposal. &amp;nbsp;This is my take on the whole thing.&lt;/p&gt;
&lt;p&gt;1) TimeZone2 should not be based on the Vista &amp;quot;dynamic/historic timezone API&amp;quot;, it should contain all the logic/data to compute this independent of the OS. &amp;nbsp;This is so much easier for the developer, less things to think about and consider. &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) TimeZone is a broken, almost useless class. &amp;nbsp;The ideal recourse is to replace it - it is already broken. &amp;nbsp;That said, if you are adamant about not replacing it, the new name should describe a class which clearly indicates that it is a replacement and therefore I am ok with the TimeZone2 name.&lt;/p&gt;
&lt;p&gt;3) Define interfaces so we have more flexibility... such as IDateTime and ITimeZone.&lt;/p&gt;
&lt;p&gt;4) &amp;nbsp;Also, I don't like this: TimeZone2.FindSystemTimeZoneById(“Hawaiian Standard Time”);&lt;/p&gt;
&lt;p&gt;I would like all the time zones be listed, like the Color class lists many colors. &amp;nbsp;Easier discoverability, strongly typed (no misspelling bugs), less frustration and time wasted looking things up on msdn or wherever.&lt;/p&gt;
&lt;p&gt;5) May I suggest an instantiation of a TimeZone2 object have the methods:&lt;/p&gt;
&lt;p&gt;ToLocalTime(DateTime utcDateTime)&lt;/p&gt;
&lt;p&gt;ToUniversalTime(DateTime localDateTime)&lt;/p&gt;
&lt;p&gt;but still maintain the &amp;quot;ConvertTime&amp;quot; static method.&lt;/p&gt;
&lt;p&gt;I named my static method &amp;quot;ToOtherTimeZone&amp;quot;, but I like &amp;quot;ConvertTime&amp;quot; as well.&lt;/p&gt;
&lt;p&gt;Last but not least. &amp;nbsp;I am very happy you guys are working on this TimeZone thing. &amp;nbsp;The framework certainly needs it!&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Jules&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#1044504</link><pubDate>Thu, 09 Nov 2006 20:24:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1044504</guid><dc:creator>kcwalina</dc:creator><description>&lt;p&gt;Jules, &lt;/p&gt;
&lt;p&gt;Thanks for the very detailed feedback. I have passed it to the team working on TimeZone2.&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#1183062</link><pubDate>Fri, 01 Dec 2006 14:37:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1183062</guid><dc:creator>agornik</dc:creator><description>&lt;p&gt;Hey Krzysztof. &lt;/p&gt;
&lt;p&gt;Did you thought about different solution?&lt;/p&gt;
&lt;p&gt;Maybe your should separate TimeZone class as a container and a manager of TimeZones (all that static methods and calculating stuff).&lt;/p&gt;
&lt;p&gt;I didn't dig enought deep into the problem, but, perhaps, you could implement all time management features in a static (?) class named (for example) &amp;quot;Clock&amp;quot; (that would be really a good name) or &amp;quot;Time&amp;quot; and have a stupid TimeZone container (maybe even keep the old TimeZone class, or create a base class to improve compartability) . In that case, that would not be that important how this container would be called.&lt;/p&gt;
&lt;p&gt;The usage pattern will be something like this:&lt;/p&gt;
&lt;p&gt;Clock.GetTimeZone(&amp;quot;name&amp;quot;).IsDayLightSavingTime() .&lt;/p&gt;
&lt;p&gt;And the method could delegate the functionality back in the clock class via internal methods.&lt;/p&gt;
&lt;p&gt;I agree, from the point of OOP this is not the best thing to do, but from the point of usability, maybe it's the thing to consider ?&lt;/p&gt;
&lt;p&gt;p.s: just finished reading your book (design guidelines) a couple of weeks ago, and want to say my &amp;quot;thanks&amp;quot;. Great one.&lt;/p&gt;</description></item><item><title>推薦一個很棒的 Design Blog. "Krzysztof Cwalina"</title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#1665268</link><pubDate>Tue, 13 Feb 2007 03:57:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1665268</guid><dc:creator>Refines.Info["Polo Lee"]</dc:creator><description>&lt;p&gt;為什麼推薦 ? Krzysztof Cwalina 是 .NET Framework API Design Team 的 Program Manager, 他也寫了 一本 Framework Design&lt;/p&gt;
</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#1843982</link><pubDate>Fri, 09 Mar 2007 16:00:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1843982</guid><dc:creator>Stefan Wenig</dc:creator><description>&lt;p&gt;I think a lot of commenters here are simply ignoring an important part of what krzystof is saying: There is no new version number in .net 3.0 or 3.5 for assemblies that already existed in 2.0. Therefore, breaking changes are absolutely not an option, this is not a mere matter of preference.&lt;/p&gt;
&lt;p&gt;Consider what a breaking change would mean. Among other things it would bring library developers in an impossible situation. Once I update my libraries to the new version of the .NET assemblies, they are not going to work in older versions. Worse, strong naming won't prevent this error because the version numbers did not change. &lt;/p&gt;
&lt;p&gt;The effects of such a decision would be simply unacceptable to any library developer (and cause problems for application developers too). We would end up having to query the installed framework version during installation (adding the requirement of an installation routine, which is unnatural for libraries), and this is still not robust, because the framework could get updated afterwards. This would be ridiculous. &lt;/p&gt;
&lt;p&gt;The other option would be to increase the version number. Thanks, but no thanks. Migrating build scripts and delivering seperate library versions for 1.1/2.0 was painful enough (not everybody is building their solutions solely via VS). We definately don't want this only because of some obscure class most people have not even noticed before. &lt;/p&gt;
&lt;p&gt;Once we accept this, there are still a few things that I'm uncomfortable with. Krzystof, you seem to think that your solution would still be the best one even if the version numbers would increase to a new major number. &lt;/p&gt;
&lt;p&gt;1) You mention the possible use of publisher policies. This is technically correct, but this raises the following question: Why do we have to struggle with the unforgivingness of strong naming and still do not get to depend on it? I mean, doesn't that give us the worst of both worlds - the missing robustness of dynamic programming AND the complicated build scenarios of statically typed languages? Arguably, in this case it could be better to drop the static checking altogether and depend solely on unit tests for robustness.&lt;/p&gt;
&lt;p&gt;2) If we ignore the publisher policy problem for a second, I'd strongly agree with the posters arguing for a breaking change in case of a major update.&lt;/p&gt;
&lt;p&gt;3) I would feel better about this decision if you would consider renamimg TimeZone2 back to TimeZone with the next major update of the respective assemblies. After all, once I have completely migrated to TimeZone2 and removed every reference to the old TimeZone, renaming TimeZone2 seems pretty painless (hit the obsolete message, search&amp;amp;replace in files). &amp;nbsp;And aliases are always a possibility. (Although I have to say that this would be much easier if i had a project/solution-wide way of defining aliases, having to put a &amp;quot;using&amp;quot; in every code file is a pain. Especially if I have to decorate them with #if's. There are still moments when I miss those old #includes's ;-))&lt;/p&gt;
&lt;p&gt;Stefan&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#2378726</link><pubDate>Wed, 02 May 2007 21:49:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2378726</guid><dc:creator>David Nelson</dc:creator><description>&lt;p&gt;Stefan,&lt;/p&gt;
&lt;p&gt;This is precisely why releasing an in-place &amp;quot;update&amp;quot; to the framework was a terrible idea in the first place. I am shocked that the BCL team didn't see this problem or something just like it coming from miles down the road when that &amp;quot;solution&amp;quot; was first proposed.&lt;/p&gt;
&lt;p&gt;Krzysztof,&lt;/p&gt;
&lt;p&gt;&amp;quot;I would assert naming changes for hygiene reasons can never provide enough value to offset their cost.&amp;quot;&lt;/p&gt;
&lt;p&gt;You could not be more wrong. Naming is the SINGLE GREATEST USABILITY ISSUE that developers deal with on a daily (no, line by line) basis. When I can't remember which namespace KeyedCollection&amp;lt;&amp;gt; is in (who in their right mind came up with ObjectModel?), its because someone made a bad naming decision. That costs me time and breaks my rhythm as I have to fire up MSDN and go look it up. If you start making these kinds of decisions with every release, my productivity starts going down as I have to refer to documentation more and more often just to figure out the name of the class that I want to use. As previous comments have pointed out, Win32 suffered terribly from this. I use .NET for RAD (rapid application development); if your design decisions are slowing me down, .NET ceases to be useful to me.&lt;/p&gt;
&lt;p&gt;And as a side note, I completely agree with Stefan that project-level aliases are an absolute necessity. I hate when &amp;quot;moving forward&amp;quot; in languages (C++ to C#) causes me to go backward in functionality.&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#2395288</link><pubDate>Thu, 03 May 2007 18:07:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2395288</guid><dc:creator>Stefan Wenig</dc:creator><description>&lt;p&gt;David,&lt;/p&gt;
&lt;p&gt;I disagree. Keeping the changes in existing components on a service-pack level makes a lot of things easier for a lot of people. It simply means that I can cease support for the &amp;quot;old&amp;quot; 2.0 version and require customers to install the SP if I depend on any bug fixes, or I can just be agnostic of the SP-level of 2.0 components. 3.0 and 3.5 only affect me if I use those features. In fact, we put 3.0/3.5-dependent features in separate assemblies, so customers get a choice without us having to maintain seperate build processes as we did for 1.1 and 2.0. I wouldn't want it any other way, really.&lt;/p&gt;
&lt;p&gt;TimeZone2 is just not a big enough issue to justify any of this. If stuff like that starts to be all over the BCL, I'd be with you though. Thats why I'd think it'd be worth the trouble of eliminating TimeZone and renaming TimeZone2 to TimeZone in the next major.&lt;/p&gt;</description></item><item><title>re: System.TimeZone2 Naming ... and related design guidelines </title><link>http://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx#8340828</link><pubDate>Fri, 28 Mar 2008 06:02:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8340828</guid><dc:creator>Roger Willcocks</dc:creator><description>&lt;p&gt;Probably far too late for this. &amp;nbsp;But couldn't most of this been handled with a &amp;quot;TimeZoneConverter&amp;quot;, &amp;quot;TimeZoneManager&amp;quot; or using Extension methods?&lt;/p&gt;</description></item></channel></rss>