我知道这可能纯粹是一种设计偏好,但从您的角度来看:
我有一个有3个属性的类:(没有对象的构造函数)
基于实例的示例
public async void Get(string objectId) {
// Gets specific item from "Tag" table
ParseQuery<ParseObject> query = ParseObject.GetQuery("Tag");
ParseObject tagObject = await query.GetAsync(objectId);
this.ObjectId = tagObject.ObjectId;
this.Name = tagObject.Get<string>("name");
this.Count = tagObject.Get<int>("count");
}
设置我的对象就像这样:
Tag myTag = new Tag();
await myTag.Get("123456");
// Properties are set and ready to work with
静态示例
public static async Task<Tag> Get(string objectId) {
Tag toReturnTag = new Tag();
// Gets specific item from "Tag" table
ParseQuery<ParseObject> query = ParseObject.GetQuery("Tag");
ParseObject tagObject = await query.GetAsync(objectId);
toReturnTag.ObjectId = tagObject.ObjectId;
toReturnTag.Name = tagObject.Get<string>("name");
toReturnTag.Count = tagObject.Get<int>("count");
return toReturnTag;
}
并将如此设置:
Tag myTag = await Tag.Get("123456");
答案 0 :(得分:1)
我认为没有明确的,明确更好的方法。对我而言,这种情况取决于您最希望如何将职责与应用程序中的对象相关联。就目前而言,你的两个功能大致相同。
但从逻辑上讲,您是否希望“访问数据库”成为每个Tag对象负责的事情?他们是否应该了解数据库,从更广泛的意义上讲,他们是否了解自己以外的任何事情?或者他们应该只使用他们(似乎)需要的所有信息来构建,而不是担心沟通?
在你的情况下,你似乎没有做任何事情,只允许你的对象承担数据库访问的责任,所以在我看来你最好限制他们的关注,而不是静态选项。 (如果你必须在那些只有那两个之间做出选择,我的意思是。我认为你可以在你的ViewModel中使用非静态方法做同样的构造并返回一个Tag对象。我的感觉主要是我应该尝试标签限制他们的顾虑,而不是静态与实例。)
另外,在静态情况下,为什么没有构造函数?你在返回之前设置了所有Tag对象的属性,所以除非你需要能够构造一个Tag对象,其部分或全部属性为null,为什么不能有呢?
编辑:有些人合理地指出,静态方法往往会使单元测试变得更难。我原则上同意这一点,但我认为在这种情况下他会更好:
我对ParseObject.GetQuery(我认为这可能是Xamarin?)一无所知,但我不确定静态或这种特定结构是否会使模拟数据源变得更加困难。