我刚读完所有的Doctrine 2文档,我开始自己的沙盒,我理解了大部分的原理,但仍有一个问题,我在文档中找不到任何完整的解释.
Proxy课程?据我所知,代理类添加了一个层,让您可以向实体添加一些其他功能,但为什么要使用代理而不是在实体类中实现方法呢?
我的WCF服务可以从代码的第一个模型回归类的唯一方法是通过设置ProxyCreationEnable来false使用下面的代码.
((IObjectContextAdapter)MyDb).ObjectContext.ContextOptions.ProxyCreationEnable = false;
Run Code Online (Sandbox Code Playgroud)
这样做的负面后果是什么?一个好处是我至少可以将这些动态类型序列化,以便可以使用WCF通过线路发送它们.
我知道这可能是基本的痛苦,但我很难绕过它.
class Main
{
constructor()
{
requestAnimationFrame(this.update); //fine
}
update(): void
{
requestAnimationFrame(this.update); //error, because this is window
}
}
Run Code Online (Sandbox Code Playgroud)
似乎我需要一个代理,所以让我们说使用Jquery
class Main
{
constructor()
{
this.updateProxy = $.proxy(this.update, this);
requestAnimationFrame(this.updateProxy); //fine
}
updateProxy: () => void
update(): void
{
requestAnimationFrame(this.updateProxy); //fine
}
}
Run Code Online (Sandbox Code Playgroud)
但是来自Actionscript 3的背景,我不确定这里发生了什么.抱歉,我不确定Javascript的开始位置和TypeScript结束.
updateProxy: () => void
Run Code Online (Sandbox Code Playgroud)
而且,我不相信我这样做是对的.我想要的最后一件事是我的班级大部分都有aa()函数需要访问,aProxy()因为我觉得我写两次相同的东西?这是正常的吗?
我想测试JavaScript对象是否是代理.琐碎的方法
if (obj instanceof Proxy) ...
Run Code Online (Sandbox Code Playgroud)
在这里不起作用,也没有遍历原型链Proxy.prototype,因为所有相关操作都得到了底层目标的有效支持.
是否可以测试任意对象是否是代理?
这就是我想要做的事情:
$clsName = substr(md5(rand()),0,10); //generate a random name
$cls = new $clsName(); //create a new instance
function __autoload($class_name)
{
//define that instance dynamically
}
Run Code Online (Sandbox Code Playgroud)
显然这不是我实际做的,但基本上我有一个类的未知名称,并根据名称,我想生成具有某些属性等的类.
我已经尝试过使用eval(),但它让我更适合私人和$ this->引用......
//编辑
好吧,很明显,我的短暂和甜蜜的"这就是我想做的事情"在那些可能提供答案的人中引起了巨大的冲突和惊愕.为了得到一个真正的答案,我会更详细.
我有一个验证框架,使用我维护的网站上的代码提示.每个函数都有两个定义
function DoSomething($param, $param2){
//code
}
function DoSomething_Validate(vInteger $param, vFloat $param2){
//return what to do if validation fails
}
Run Code Online (Sandbox Code Playgroud)
我想在我的数据库中为主键添加验证器.我不想为每个表创建一个单独的类(203).所以我的计划是做类似的事情
function DoSomething_Validate(vPrimaryKey_Products $id){ }
Run Code Online (Sandbox Code Playgroud)
__autoload将生成vPrimaryKey的子类并将table参数设置为Products.
现在开心?
我在从应用程序上下文中提取Spring bean时遇到问题.
当我尝试;
InnerThread instance = (InnerThread) SpringContextFactory.getApplicationContext().getBean("innerThread", InnerThread.class);
Run Code Online (Sandbox Code Playgroud)
我明白了
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'innerThread' must be of type [com.generic.InnerThread], but was actually of type [$Proxy26]
Run Code Online (Sandbox Code Playgroud)
如果没有getBean()调用中的指定类,我会得到一个ClassCastException(您可以在下面详细介绍).
InnerThread bean被初始化为非单例,因为我需要多个实例.InnerThread类还扩展了Thread.有趣的是,这个错误出现在OuterThread中,它的设置方式与InnerThread完全相同.
我试图在下面包含所有相关的代码清单/堆栈跟踪.拥有更多Spring经验的人能告诉我这里发生了什么吗?
OuterThread.java片段:
public class OuterThread extends Thread {
private Queue<InnerThread> createInnerThreads() {
Queue<InnerThread> threads = new ArrayBlockingQueue();
ApplicationContext ctx = SpringContextFactory.getApplicationContext();
int i = 0;
for (SearchRule search : searches) {
logger.debug("Number of times looped " + i++);
//Seprated lines to get a better sense of what is going on
Object …Run Code Online (Sandbox Code Playgroud) 说我有模特:
class Animal(models.Model):
type = models.CharField(max_length=255)
class Dog(Animal):
def make_sound(self):
print "Woof!"
class Meta:
proxy = True
class Cat(Animal):
def make_sound(self):
print "Meow!"
class Meta:
proxy = True
Run Code Online (Sandbox Code Playgroud)
让我们说我想做:
animals = Animal.objects.all()
for animal in animals:
animal.make_sound()
Run Code Online (Sandbox Code Playgroud)
我想找回一系列的Woofs和Meows.很明显,我可以在原始模型中定义一个基于animal_type分叉的make_sound,但每次我添加一个新的动物类型(想象它们在不同的应用程序中)时,我必须进入并编辑make_sound函数.我宁愿只定义代理模型并让它们自己定义行为.据我所知,没有办法返回混合的Cat或Dog实例,但我想也许我可以在主类上定义一个返回cat或dog模型的"get_proxy_model"方法.
当然你可以这样做,并传递类似主键的东西,然后只做Cat.objects.get(pk = passed_in_primary_key).但这意味着对您已经拥有的数据进行额外查询,这似乎是多余的.有没有办法以有效的方式将动物变成猫或狗的实例?做我想做的事的正确方法是什么?
我很确定我在某个地方缺少一些约束或警告,但这是我的情况.假设我有一个我想拥有代理的类,如下所示:
public class MyList : MarshalByRefObject, IList<string>
{
private List<string> innerList;
public MyList(IEnumerable<string> stringList)
{
this.innerList = new List<string>(stringList);
}
// IList<string> implementation omitted for brevity.
// For the sake of this exercise, assume each method
// implementation merely passes through to the associated
// method on the innerList member variable.
}
Run Code Online (Sandbox Code Playgroud)
我想为该类创建一个代理,以便我可以拦截方法调用并对底层对象执行一些处理.这是我的实现:
public class MyListProxy : RealProxy
{
private MyList actualList;
private MyListProxy(Type typeToProxy, IEnumerable<string> stringList)
: base(typeToProxy)
{
this.actualList = new MyList(stringList);
}
public static object CreateProxy(IEnumerable<string> stringList) …Run Code Online (Sandbox Code Playgroud) 在使用RESTful API的现代Web项目中,我们经常会看到AJAX调用,就像下面的JavaScript文件一样.
$.ajax({
type: "POST",
url: myapp.baseUrl + 'Api/Note',
data: ko.mapping.toJSON(note),
contentType: 'application/json',
}).done(function (response) {
// do something
}).fail(function (jqxhr) {
// do something else
});
Run Code Online (Sandbox Code Playgroud)
我喜欢WebAPI,我喜欢Knockout,我喜欢将两者结合在一起.然而,这些AJAX调用非常冗长,包含了我并不感兴趣的各种细节.相反,我创建了一个围绕这些方法的包装器:
myapp.api.saveNote(note)
Run Code Online (Sandbox Code Playgroud)
但是,这仍然需要我实际编写一个包含AJAX调用的包装器.我想知道你是否真的可以生成这些包装器.本质上,我将为我的WebAPI生成一个基于JS的客户端,类似于Java和.NET如何基于WSDL生成客户端.
我已经看过amplifyJS,但这只能部分地解决问题.我正在寻找一种解决方案,它实际上在我的解决方案中基于WebAPI控制器创建了一个接口.如果这不存在,我会开始修补自己.我已经有了一个想法,WebAPIClientGenerator它使用反射迭代所有ApiController的.
我有一个MVC解决方案,它为Web API服务提供了一些路由.在某些情况下,我将使用简单的HTTP get从JavaScript中调用它们.在其他方面,我想从一些.NET代码中调用它们,也许是另一个MVC应用程序.
有没有办法为这些Web API端点添加服务引用,并让工具创建代理客户端和CLR类型,就像使用典型的WCF服务一样?我知道这里没有SOAP,但我确实读过它是可能的,而不是如何.
proxy-classes ×10
c# ×3
javascript ×2
wcf ×2
aop ×1
asp.net ×1
casting ×1
clr ×1
django ×1
doctrine-orm ×1
ecmascript-6 ×1
java ×1
jquery ×1
php ×1
python ×1
reflection ×1
rest ×1
spring ×1
this ×1
typescript ×1