Is it ok to use a class like this (design / guideline specific)? I'm using MVVM Pattern.
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
Is it ok to use a class like this (design / guideline specific)? I'm using MVVM Pattern.
public static class Pages
{
public const string Home = "Home.xaml";
public const string View2 = "View2.xaml";
/* a few more... */
}
A general guideline when using
const
for defining constant values. Whether these constants are to be accessed outside assembly? If not then declare it asThere are significant differences between
const
andpublic static readonly
, and you should consider which to use with care:(By "client" here, I mean "code in a different assembly referring to the member.)
const
. Withpublic static readonly
, they will see the updated value. If you recompile all clients anyway, this isn't a problem.const
form is a compile time constant, which means it can be used in:If you're happy to recompile all your clients if you ever change the value, the benefits of the second bullet point point towards using
const
.Of course, I wonder whether
Pages
really needs to be public anyway... it sounds like something which could beinternal
, withinternal
members - at which point the downsides ofconst
go away entirely.From the design perspective of your question, it seems like it could get messy fast using a single static object to contain all page references. Can you not just store it in the actual page object?
then call it along the lines of...
I think this is one of the best things you can do. Some more suggestions: with strings it's perfectly fine to use
const
s. In case you'd want to use different types, usestatic readonly
and then initialize in astatic
constructor.For a different approach using enums, see this thread. Since what you're trying to do looks a lot like a string enum, that might be the way to go for you.
And don't forget that as long as you specify your pages in code, making changes (e.g. renaming or moving a page) will be a pain. Consider using something like resources or sitemaps. (In case you only use the class for a page list, I'd go with using C#'s strongly typed resources - they will behave in the same way as your class and you won't have to code them by hand.)