这个问题我已经在脑海里喋喋不休了一段时间.那天晚上我和一个人聊了聊,他告诉我他不会使用导航框架,因为他无法弄清楚它是如何与MVVM一起工作的.尽管我试图解释模式应该用一点盐,他不会听.
我的观点是,当他们解决一些问题时,模式很棒.有时只有部分模式解决了特定问题,而其他部分则导致不同的问题.任何开发人员的目标都是使用模式知识和远见的组合构建一个可靠的应用程序.
我觉得MVVM正在成为统治它们的一种模式.由于.Net没有直接支持,因此需要一些奇特的业务来使其工作.我觉得人们忽略了模式的重点,这是松散耦合,可测试的代码,而是跳过篮球,错过了尝试跟随MVVM的伟大经历.
MVVM很棒,但我希望它能为新手带来警告或免责声明,因为我担心人们会因为害怕被mvvm棒击中而回避Silverlight的发展.
编辑:我可以添加作为编辑,我使用并同意MVVM作为我知道的模式,在我的项目中是不可行的.我的问题在于它所具有的包容性,好像它必须被用作发展的一部分.它被用作一个整体特征,而不是一个模式,它是.
编辑2:感谢到目前为止的所有评论,一个问题出现的问题是我到目前为止没有想到的.是否为GUI/RIA开发引入了更丰富更先进的框架,显示出这一代RAD开发的弱点.也就是说,是否缺乏与这些框架一起教授的代码设计和模式知识?我曾经问过一本关于C#的书(在Pro C#和.Net框架之前很受欢迎)并被告知我为什么要知道C#minus winforms/asp.
当然有很多关于这些主题的书籍/ KB,但除了超级巨星和非常优秀的程序员之外,还有人使用它们吗?
我正在研究这两种方法.一个节省一个负载.显然两者都需要某种错误处理,所以我实现了一些"捕获所有处理".现在,搜索的脚跟是,接下来发生的事情是在运行时,错误发生的位置.因此,我想处理调用者中的错误,一级以上.这样我可以针对不同情况使用不同的逻辑.
一个例子是.如果我在第一次运行时检查负载并且它失败了,我可以假设他们的内存可能已被清除.但是如果我在执行期间尝试加载,我可以假设内存没有被清除(通过正确的方式)并且必须启动某些内容.
public void SaveToStorage(AccountCollection Collection)
{
try
{
var storage = IsolatedStorageSettings.ApplicationSettings;
storage["defaultCollection"] = Collection;
storage.Save();
}
catch (Exception ex)
{
// Do something meaningful here
}
}
public AccountCollection LoadFromStorage()
{
try
{
AccountCollection collection;
var storage = IsolatedStorageSettings.ApplicationSettings;
storage.TryGetValue("defaultCollection", out collection);
return collection;
}
catch (Exception ex)
{
// Do something meaningful here
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
基本上我问我可以将错误提交给调用者但仍保留原始错误详细信息.
编辑:约翰和安德鲁都给出了正确的答案.安德鲁将得到绿色标记,因为我想在原始类中做一些其他通用清理.
这是我第一次使用接口和正确的命名空间结构.当我编译时,我得到下面的错误,我不知道这意味着什么.我所做的任何搜索都会显示私人公共问题,但两者都是公开的.有任何想法吗?
错误可访问性不一致:返回类型'System.Collections.Generic.List'不如方法'Webtext.ApplicationEntities.Implementations.AdditionalEntities.UrlBuilderO2.GetUrlRequests(string,string,string,string)'C:\ Users\Laptop\documents\visual studio 2010\Projects\Webtext\Webtext\ApplicationEntities\Implementations\AdditionalEntities\UrlBuilderO2.cs 19 39 Webtext
代码文件是:
namespace Webtext.ApplicationEntities.Interfaces
{
interface IUrlBuilder
{
List<IOperatorRequest> GetUrlRequests(string UserName, string Password, string MessageRecipient, string Message);
}
}
Run Code Online (Sandbox Code Playgroud)
和:
namespace Webtext.ApplicationEntities.Implementations.AdditionalEntities
{
public class UrlBuilderO2: IUrlBuilder
{
public List<IOperatorRequest> GetUrlRequests(string UserName, string Password, string MessageRecipient, string Message)
{
throw new NotImplementedException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
命名空间结构
Webtext
ApplicationEntities
Interfaces
##### INTERFACE IS HERE
Implementations
AdditionalEntities
##### URL BUILDER IS HERE
Run Code Online (Sandbox Code Playgroud) 好的,所以我决定开始在我的代码库中使用接口,这对于某些任务来说非常好.例如,我有一个实现IUrlBuilder的URL构建器类,现在实现无关紧要.很棒,但以此界面为例.
namespace SproutMessagingFramework.Webtext.Interfaces
{
using System.Net;
public interface ICookieJar
{
CookieCollection Collection { get; set; }
CookieContainer Container { get; set; }
void AddResponse(HttpWebResponse Response);
void AddResponse(HttpWebResponse Response, string Path, string Domain);
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这个界面非常具体,这两个方法除了具体类已经做的事情之外不会做太多其他事情.那我为什么要把它变成一个界面呢?好吧,如果我需要更改AddResponse的实现,我的想法是什么?
这是正确的还是我只是膨胀代码库?
有谁知道我是否能找到_不再需要换行符()的列表.到目前为止,我注意到参数列表和属性现在没有换行符.
我想知道是否有可能让静态类实例化另一个类,以便全局保存对它的引用.我有一个数据存储,它由一个内存中的对象组成,并希望从不同的位置访问它.数据需要持久更改应用程序,因此需要在窗口或UI范围之外实例化.
我希望使用静态类来执行此操作将是正确的方法.这是单身人士吗?我正在寻找什么?
关于视图模型在数据绑定之外的作用,我有点困惑.我有一个内置Silverlight的菜单.菜单包含x个在运行时确定的菜单项.我想添加的功能之一是每个menuitem在悬停时都有不同的文本颜色.
是视图的角色有颜色选择器方法还是视图应该在它的代码后面处理它?
我在模拟器和手机本身都发生了一些无法解释的崩溃事件.基本上当我的应用程序崩溃时,我没有任何对话框,手机返回到主屏幕.
我有以下代码来显示MessageBox,但这是以某种方式绕过...
// Code to execute if a navigation fails
private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
{
MessageBox.Show(e.Exception.ToString());
}
// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ExceptionObject.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我想到它可能与记忆有关,因为我的应用处理了很多图像.但我认为仍然会被我上面未处理的异常代码捕获.关于我应该如何追踪这一点的任何想法将不胜感激.
我正在尝试使用Caliburn.Micro实现这样的防护处理,但是当应用程序运行时,我得到了一个无效的强制转换异常.
财产:
public Account UserAccount
{
get
{
return account;
}
set
{
account = value;
NotifyOfPropertyChange(() => UserAccount);
NotifyOfPropertyChange(() => CanSaveAndNavigateToComposeView());
}
}
Run Code Online (Sandbox Code Playgroud)
方法:
public void SaveAndNavigateToComposeView()
{
CommitAccountToStorage();
navigationService.UriFor<ComposeViewModel>().Navigate();
}
Run Code Online (Sandbox Code Playgroud)
守卫:
public bool CanSaveAndNavigateToComposeView()
{
return !(string.IsNullOrEmpty(UserAccount.DisplayName) ||
string.IsNullOrEmpty(UserAccount.Username) ||
string.IsNullOrEmpty(UserAccount.Password) ||
string.IsNullOrEmpty(UserAccount.ServerSymbol));
}
Run Code Online (Sandbox Code Playgroud)
如果我取消对财产的通知道具更改,那么警卫就可以工作,但这意味着我的方法永远无法评估.
我正在研究使用独立存储在Windows Phone中进行持久性建模的不同选项.我提出的一个想法是每个对象处理它自己的概念(当然是理所当然的)持久性,而不是为了保存对象而创建一个存储库或其他这样的实体.
我似乎无法找到关于这种持久性方法的任何好信息,这让我相信我可能偶然发现了一种反模式.
有没有人以这种方式接近坚持?如果是这样的话,你对这种方法的看法是什么?
在ASP.NET的WebAPI有一个在应用程序启动时它是自动调用的global.asax.cs文件名为ApplicationStart方法.怎么称呼?
我问的原因是我想添加一个Application_End方法来进行我需要做的任何清理.
c# ×7
mvvm ×3
silverlight ×3
.net ×2
code-design ×1
interface ×1
persistence ×1
singleton ×1
static ×1
vb.net ×1