Class ASP经典与类整合-不确定如何构造演示文稿

Class ASP经典与类整合-不确定如何构造演示文稿,class,asp-classic,Class,Asp Classic,我有一个ASP经典网站,我正在维护,我想巩固对对象和属性的访问。我编写了一些带有属性的简单类,用于获取数据、插入数据和更新特定对象的数据。这些类中的大多数对应于一个表 我想知道应该在哪里做一些事情,比如为屏幕创建HTML输出,或者应该在哪里放置使用多个类的方法。例如,我可能有一个学生等级的班级,它使用作业和学生信息生成输出 我是否创建了一个“presentation”类,从对象中获取记录集(或数组?)并呈现输出 谢谢 首先,我建议使用WSC的。与类不同,WSC可以有条件地加载/实现。在我工作的公

我有一个ASP经典网站,我正在维护,我想巩固对对象和属性的访问。我编写了一些带有属性的简单类,用于获取数据、插入数据和更新特定对象的数据。这些类中的大多数对应于一个表

我想知道应该在哪里做一些事情,比如为屏幕创建HTML输出,或者应该在哪里放置使用多个类的方法。例如,我可能有一个学生等级的班级,它使用作业和学生信息生成输出

我是否创建了一个“presentation”类,从对象中获取记录集(或数组?)并呈现输出


谢谢

首先,我建议使用WSC的。与类不同,WSC可以有条件地加载/实现。在我工作的公司,我们使用WSC构建了一个非常稳定和快速的多层ORM。WSC是用脚本代码编写的对象,具有属性和方法


和您一样,每个表都有一个WSC,其中包含列的属性。此外,每个WSC都有一个initialise()方法,该方法接受一个ID,并使用该ID的数据库中的值加载所有对象属性。它还有一个save()方法。这将检查是否存在id。如果没有,它执行一个插入,如果有一个id,这是一个现有记录,它执行一个更新。它还有一个delete函数()。我们有一个小的ASP网页,可以为给定的表动态生成这些WSC

在WSC中,我们有一个数据访问层对象,它执行WSC中的所有查询。每个WSC只构建SQL字符串并将其发送到DAL,DAL返回一个记录集(或者只是执行而没有结果)。 这个DAL是唯一需要知道数据库连接字符串的组件。如果需要,还可以使用它记录所有查询

我们还有用于记录/调试、转换的WSC,还有一个非常重要的WSC,它可以逃避所有SQL以防止SQL注入

回到你的问题上来

通常情况下,您会尽可能地将逻辑和表示分离开来。在asp.net mvc或django等现代框架中,只能将信息传递到通用词典中可以添加到的页面,或传递到页面上的模型中的页面。(作为类映射表之一的模型)。 如果你能模仿这种行为,那将给你一个很好的逻辑和代码分离

我会告诉你我们做了什么来解决你描述的问题,但我也会告诉你我们的解决方案并不理想,如果我们从头开始,我会怎么做:

我们在当前应用程序中所做的是向WSC添加方法。因此,假设我们有一个user()wsc,它映射到一个用户表,我们已经可以执行以下操作:

user.firstname = "erik"
user.lastname = "test"
user.save()
我们不需要向这个WSC添加“user stuff”,比如login()函数,它接受用户名和密码,并返回用户id(如果登录不成功,则不返回任何内容):

通过这种方式,我们将属于特定实体的逻辑放在它所属的WSC中,从而将其分离

因此,我们实际上要做的是向对象本身添加逻辑。这不是真正的OO风格的实现方式。在真正的面向对象编程中,您将对象(如用户对象)作为参数或函数结果传递,并保持(处理)逻辑的独立性。经典ASP并不是真正的面向对象的,所以我们选择将逻辑添加到对象本身,但事后来看,如果您愿意,可以在经典ASP中实现类似的功能

此外,还有一些程序提出了它们属于何处的问题。向用户发送格式化的PDF文件时,逻辑是进入用户对象还是字母对象? 我们回答这个问题的方法就是查看代码。我们是否已经有用户WSC可用并已初始化?然后我们可以很容易地向用户添加一个方法。如果我们需要批量发送信件,并且我们从open letters.wsc开始,我们将向letters wsc添加功能。老实说,它主要是自己安排的

如果将业务逻辑和ORM(表到类或WSC的映射)完全分离,那么就不会有这个问题。这就是为什么现代OO语言是解决这个问题的好方法。在经典ASP中,您可以通过将处理逻辑放在ASP页面中来实现这一点,而对象就在那里供处理逻辑使用

我们目前所做的是,我们有一个专用的WSC,可以将信息存储在数据库中。我们在一个ASP页面上处理,但不显示它。相反,我们将结果放在这个WSC中(它将其存储在一个大的键值表中)。然后我们重定向到另一个ASP页面,该页面显示来自同一WSC/表的数据,从而将代码与逻辑分离

很快,就可以使用经典ASP中的memcached了。memcached是一种完全存储在内存中的键值存储,facebook也使用它。它比用于存储的数据库快得多。我会重新开始,我会这样实施它:

  • 使用WSC创建一个我们现在拥有的ORM
  • 不再将业务逻辑放在WCS中,默认情况下将其放在ASP页面中
  • 让asp页面将结果存储在memcached中(如果使用jscript而不是vbscript,则可以是简单的变量,也可以是序列化的记录集,甚至是json对象)
  • 重定向到可以显示memcached中存储的信息的演示页面
  • 该死的Caveatrob,正如你所看到的,我对这个东西非常感兴趣,好像我写了一本关于实现这个的小书。从零开始做这件事需要做很多工作,我意识到我说的比你要求的要多,但我不想在写完后删除它。
    我希望其中一些信息对您有利,即使您可能不会实现整个框架。(如果有,请告诉我:)
    dim userid
        userid = user.login("test", "test")