<p>I am designing a new System and I have a lot of Interfaces that will grow over time with the system. What is the best practice to name this interfaces</p>

<pre><code>ISomethingV01
ISomethingV02
etc
</code></pre>

<p>and I do this</p>

<pre><code>public interface ISomething{
      void method();
}
</code></pre>

<p>then I have to add method 2 so now what I do?</p>

<pre><code>public interface ISomethingV2:ISomething{
      void method2();
}
</code></pre>

<p>or same other way?</p>

[{'answer_id': 45127, 'author': 'FlySwat', 'author_id': 1965, 'author_profile': 'https://Stackoverflow.com/users/1965', 'pm_score': 2, 'selected': False, 'text': '<p>The purpose of an interface is to define an abstract pattern that at type must implement.</p>\n\n<p>It would be better implement as:</p>\n\n<pre><code>public interface ISomething\n\npublic class Something1 : ISomething\npublic class Something2 : ISomething\n</code></pre>\n\n<p>You do not gain anything in the form of code reusability or scalable design by creating multiple versions of the same interface.</p>\n'}, {'answer_id': 45129, 'author': 'aku', 'author_id': 1196, 'author_profile': 'https://Stackoverflow.com/users/1196', 'pm_score': 2, 'selected': False, 'text': "<p>I don't know why people downvote your post. I think that good naming guidelines are <strong>very</strong> important. </p>\n\n<p>If you need to maintain compatibility with prev. version of the same interface consider using inheritance.\nIf you need to introduce new version of interface consider following rule:</p>\n\n<blockquote>\n  <p>Try to add meaningful suffix to you\n  interface. If it's not possible to\n  create concise name, consider adding\n  version number.</p>\n</blockquote>\n"}, {'answer_id': 45138, 'author': 'Garo Yeriazarian', 'author_id': 2655, 'author_profile': 'https://Stackoverflow.com/users/2655', 'pm_score': 4, 'selected': True, 'text': "<p>Ideally, you shouldn't be changing your interfaces very often (if at all).  If you do need  to change an interface, you should reconsider its purpose and see if the original name still applies to it.</p>\n\n<p>If you still feel that the interfaces will change, and the interfaces changes are small (adding items) and you have control of the whole code base, then you should just modify the interface and fix all the compilation errors.</p>\n\n<p>If your change is a change in how the interface is to be used, then you need to create a separate interface (most likely with a different name) to support that alternative usage pattern.</p>\n\n<p>Even if you end up creating ISomething, ISomething2 and ISomething3, the consumers of your interfaces will have a hard time figuring out what the differences are between the interfaces.  When should they use ISomething2 and when should they use ISomething3?  Then you have to go about the process of obsoleting ISomething and ISomething2.</p>\n"}, {'answer_id': 45142, 'author': 'aku', 'author_id': 1196, 'author_profile': 'https://Stackoverflow.com/users/1196', 'pm_score': 2, 'selected': False, 'text': '<p>I agree with <a href="https://stackoverflow.com/questions/45123/interfaces-and-versioning#45138">Garo Yeriazarian</a>, changing interface is a serious decision. Also, if you want to promote usage of new version of interface you should mark old version as obsolete.  In .NET you can add <a href="http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.asp" rel="nofollow noreferrer">ObsoleteAttribute</a>.</p>\n'}, {'answer_id': 45148, 'author': 'rp.', 'author_id': 2536, 'author_profile': 'https://Stackoverflow.com/users/2536', 'pm_score': 3, 'selected': False, 'text': '<p>I think you\'re overrusing interfaces. </p>\n\n<p>Meyer and Martin told us: "Open for extension but closed for modification!"</p>\n\n<p>and then Cwalina (et al) reiterated: </p>\n\n<p>From Framework Design Guidelines...</p>\n\n<blockquote>\n  <p>In general, classes are the preferred\n  construct for exposing abstractions.\n  The main drawback of interfaces is\n  that they are much less flexible than\n  classes when it comes to allowing for\n  evolution of APIs. Once you ship an\n  interface, the set of its members is\n  fixed forever. Any additions to the\n  interface would break existing types\n  implementing the interface.</p>\n  \n  <p>A class offers much more flexibility.\n  You can add members to classes that\n  have already shipped. As long as the\n  method is not abstract (i.e., as long\n  as you provide a default\n  implementation of the method), any\n  existing derived classes continue to\n  function unchanged.</p>\n</blockquote>\n\n<p><img src="https://i.stack.imgur.com/mGYCj.jpg" alt="alt text"></p>\n'}]
['https://Stackoverflow.com/questions/45123', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1154/']