BiG*_*ERO 11 database pagination crud function
我不明白之间的差别read和list.根据维基百科:
首字母缩略词可以扩展到CRUDL,以涵盖大数据集的列表,当数据集太大而无法轻松保存在内存中时会带来额外的复杂性,如分页
我看到这个的方式只是一个阅读,如果你决定支持分页,你的结果将被分页.它并没有从根本上改变某人与系统交互的方式.你基本上是返回数据,即read.如果你想分页read结果怎么办?这会使它成为一个列表吗?
我目前在一个项目,我们要求支持列表和阅读,除了分页,我很难看到任何实现差异.
还有其他原因你应该将它们分开read并list放入自己的功能中
har*_*ldK 15
我从未见过关于"列表"在CRUD上下文中意味着什么的明确定义,但我已经实现了很多使用CRUD方法的系统.以下是您可能会考虑将"列表"操作与"读取"操作分开的一些项目:
但我必须同意你的意见.这些都不会从根本上改变您与系统交互的方式.它基本上仍在阅读数据,也许只是更聪明一些.
为简单起见:
READ 获取一个对象。LIST查询ID列表,以后可以使用READ该ID来代替基础对象。例如,假设您经营一个社交网络网站。
想象一下,每个User对象的长度大约为10或20kB,因为那里有很多东西(朋友列表,最后搜索,专辑和照片列表,cookie,最后访问的页面,帖子列表,喜欢列表等)。
还要想象一下,您有一条路线,controller并且显示了一个用户的个人资料,该个人资料从中获取数据model并将其注入view。我们称它为profile-page-view。
很明显,controller必须获取所有数据才能将其传递到视图渲染器。
想象一下,profile-page-view您在其中friends-widget展示了用户的100个最活跃的朋友,并且还想象您将使用所有这些信息(无法查询部分信息)显示在每个特定的user-miniwidget链接,帖子,照片等中。
您可以选择只选择LIST概要文件中最活跃的朋友,而不是一次获得100个用户(即1万x 100个用户=从数据库中检索到1MB的信息),而不是获取对象。
然后让控制器READ仅将列表的前5个(已处理信息的50kB)分散到HTML。
然后通过一系列AJAX调用读取其他95 ...例如:
READ在页面加载后2秒触发第一个“ 5个对象操作”,并在前一个返回后1秒触发每个后续块,直到列表中的用户50。这是LIST和READ完全分开的示例。
想象一下系统模型的API,以帮助公司销售更多产品。这将计算出一组产品数据。
发票有行,每个行都有一个关联的产品。
要获取发票4444第三行的产品,您可以执行以下操作:
// Pseudo-language.
InvoiceManager invoiceManager;
Invoice invoice;
InvoiceLine line;
Product product;
invoiceManager = whateverDependencyInjectionSystemYouUse.getService( "InvoiceManager" );
invoice = invoiceManager.getInvoiceById( 4444 );
line = invoice.lines[ 3 ];
product = line.getProduct();
Run Code Online (Sandbox Code Playgroud)
这将对产品执行读取操作。如果是延迟加载,READ则在line.getProduct();代码行上执行。
但是,如果您想查看某个产品系列的畅销产品,也许您不需要将所有产品“加载”到RAM中。
假设您要显示“鲜花”产品类别中20个畅销产品的详细信息:
// Pseudo-language.
ProductManager productManager;
ProductFamily productFamily;
Products products;
Product product;
productManager = whateverDependencyInjectionSystemYouUse.getService( "ProductManager" );
productFamily = productManager.getProductFamilyByName( "Flowers" );
products = productFamilies.getAllProductsSortedByAmountSoldLastMonth()
max = 20;
ctr = 0;
foreach( product in products )
{
dump( p );
ctr++;
if( ctr >= max )
{
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该productFamily.getAllProductsSortedByAmountSoldLastMonth()方法LIST最多将实现读取,但是没有办法将内部的真实对象加载到内部。如果该类别中包含100万种花卉产品,该怎么办?-自杀!
然后products.getItem(),在for-each循环的每次迭代中,对-implicit调用的每次迭代,READ都会执行实数查询实对象。
通常,在LIST获得ID的情况下,您可以以轻量级的方式轻松管理和存储超级READ对象,以以后再存储对象。