我尝试了Django的基于类的视图(CBV).
class BlahView(TemplateView):
template_name = 'blah/blah.html'
def get_context_data(self, **kwargs):
#code...
def get(self, request, **kwargs):
#more code...
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以从self.request获得请求参数.现在说我要解析这些请求参数并将它们存储在类中.我可以存放self.xxx吗?现在,显然基于类的工作方式,这看起来很简单.
但我无法弄清楚控制的流程,看看View(超类TemplateView)的定义.该源提到as_view()是"入口点"
我想在开头设置我的实例变量get_context_data()但是在那里进行初始化似乎不对.
我可以__init__()为我的CBV 定义一个吗?如果是这样,是否存在线程问题或多个页面访问可能与我的解析数据的全局实例一起工作?
我知道这听起来有点混乱,但我只是对CBV中的代码流感到困惑.
我可能读得太多了,而且还有一些信息过载.所以我希望得到一些明确的指导.
根据我的收集,我可以使用VS2010的T4模板来生成与EF无直接关联的POCO类.我将这些放在他们自己的项目中,而我的DAL将有一个ObjectContext派生类,对吧?
一旦我有了这些类,在UI层中使用它们是否可以接受?也就是说,所生成的类之一是BookInfo保存有关公共图书馆的书籍(标题,版本,页面,摘要等).
我的BLL将包含一个类BooksBLL,例如:
public class BooksBLL
{
ObjectContext _context;
public void AddBook(BookInfo book) { ... }
public void DeleteBook(int bookID) { ... }
public void UpdateBook(int bookID, BookInfo newBook) { ... }
//Advanced search taking possibly all fields into consideration
public List<BookInfo> ResolveSearch(Func<BookInfo, bool> filter) { ... }
//etc...
}
Run Code Online (Sandbox Code Playgroud)
因此,我的MVVM UI应用程序中的ViewModel将与上述BLL类进行通信并交换BookInfo实例.这样可以吗?
此外,Web上的MVVM帖子建议实现IDataErrorInfo用于验证目的.如果我在生成的POCO类上实现所述接口可以吗?我从样本中看到那些生成的POCO类包含所有虚拟属性和stuf,我希望添加自己的逻辑可以吗?
如果它有任何区别,目前,我的应用程序不使用WCF(或任何网络的东西).
此外,如果您发现我正在尝试构建BLL的方式出现严重错误,请随时在该区域提供帮助.
更新(根据要求提供附加信息):
我正在尝试创建一个库自动化应用程序.目前它不是基于网络的.
我正在考虑如下图层:
所以我想知道像BooksBLL在ViewModel类中使用一个实例,调用ResolveSearch()它来获取List<BookInfo>并呈现它......也就是说,在任何地方使用POCO类.
或者我是否应该有其他类来反映从我的BLL中暴露的POCO类? …
如果我将自定义IComparer传递给List的Sort()方法的实例,是否会使用相同的项调用比较器的Compare(x,y)方法?
即.是否有Compare(x,x)可能被召唤.
编辑:对列表中的项目不同的情况更感兴趣.
以下是一些示例数据:
List<Book> books = new List<Book>()
{
new Book(){Title = "artemis fowl: the time paradox", Pages = 380},
new Book(){Title = "the lieutenant", Pages = 258},
new Book(){Title = "the wheel of time", Pages = 1032},
new Book(){Title = "ender's game", Pages = 404},
new Book(){Title = "the sphere", Pages = 657}
};
Run Code Online (Sandbox Code Playgroud)
背景:
以上使用Book类的简化版本.当然,它包含许多领域.我的最终目标是允许用户执行"高级"搜索,允许用户指定任何字段,并进一步允许用户使用布尔代数为特定字段指定关键字.
例如:在标题搜索文本框中:+(蛋糕|糕点)+〜恶魔
以上意思是:找到标题中有"蛋糕"或"糕点"字样的所有书籍,并且没有"恶魔"这个词.
问题:
宝贝步骤将导致最终的解决方案.所以我最初有以下代码:
List<Func<Book, bool>> fs = new List<Func<Book, bool>>()
{
b => b.Title.Contains("me"),
b => b.Title.Contains("the")
};
var q2 = from …Run Code Online (Sandbox Code Playgroud) 开始使用所有这些MVVM的东西,我正在关注Josh Smith的这篇文章,该文章讨论了使用MVVM时的验证方法.这个例子很简单,我开始想知道如何在我自己的应用程序中使用它.
在我的BLL中,我有一个BookInfo实现IDataErrorInfo 的类来报告无效值,例如"发布日期不能在将来"或"页数不能为负".然后我AddBookViewModel会检查新创建的状态BookInfo,看看是否存在错误,并且AddBookView将在相应的TextBox旁边显示一个红色blob.那些东西很简单,就像帖子中的例子一样.
现在我的BookInfo班级还有一个作者ID列表.在我的数据库中添加新的BookInfo后,我需要检查这些作者ID是否已经存在.
这个检查应该在我的BookInfo课上完成吗?如果是这样,那么我必须将我的BLL AuthorManager对象传递给BookInfo构造函数,因为前者将包含诸如的方法CheckIfExists(int authorID).
这是推荐的方法吗?如果DB中有很多记录怎么办?动态检查会影响性能吗?
另一方面,在BookInfo课堂上和其他地方执行一些检查似乎有点混乱......特别是当所有这些检查都可以分类到同一组时...即.确保新创建的BookInfo对象有效.或者也许我错了,因为我没有经验来做出正确的判断.
一些指导?
我想选择一个具有以下ID的输入框:
id="Peoples' Choice"
如果我手动输入带有转义字符的选择器,它可以工作:
$("[id='Peoples\\' Choice']")
但是,如果我使用变量,它似乎不起作用:
var theID = "Peoples' Choice";
var sel = "[id='" + theID + "']"
chk = $(sel);
Run Code Online (Sandbox Code Playgroud)
这会发出一个语法错误,指出无法识别的表达式.我甚至尝试用theID双反斜杠+引号替换引号.
救命?