我习惯于Python允许一些巧妙的技巧将功能委托给其他对象.一个例子是委托给包含的对象.
但当我想委托__contains __时,它接缝,我没有运气
class A(object):
def __init__(self):
self.mydict = {}
self.__contains__ = self.mydict.__contains__
a = A()
1 in a
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'A' is not iterable
Run Code Online (Sandbox Code Playgroud)
我错了什么?当我打电话给.__包含__(1)时,一切顺利.我甚至试图在A中定义一个__iter __方法,使A看起来像一个可迭代的,但它没有帮助.我在这里错过了什么?
在OOP中,提到了一个术语授权.这是如何在课堂上建模的?我在雅虎等搜索,但得到了代表的链接.
我正在编写一个用于编排AWS集群的小框架,并且有一些常见的层次结构模式一次又一次出现.一种这样的模式是将一组实例收集到一个更大的对象中,然后将一些方法直接委托给所有实例.因此,我不是一遍又一遍地复制和粘贴相同的样板代码,而是使用以下模式对其进行抽象:
def __getattr__(self, item):
if not item in self._allowed_items:
raise NonDelegatableItem
def delegator():
for instance in self.all_instances:
getattr(instance, item)()
return delegator
Run Code Online (Sandbox Code Playgroud)
是否有更好的方式或模式来完成授权?
在Java Concurrency in Practice的第65和66页上,Brian Goetz列出了以下代码:
@ThreadSafe
public class DelegatingVehicleTracker {
private final ConcurrentMap<String, Point> locations;
private final Map<String, Point> unmodifiableMap;
public DelegatingVehicleTracker(Map<String, Point> points) {
locations = new ConcurrentHashMap<String, Point>(points);
unmodifiableMap = Collections.unmodifiableMap(locations);
}
public Map<String, Point> getLocations() {
return unmodifiableMap;
}
public Point getLocation(String id) {
return locations.get(id);
}
public void setLocation(String id, int x, int y) {
if (locations.replace(id, new Point(x, y)) == null)
throw new IllegalArgumentException("invalid vehicle name: " + id);
}
// Alternate version of getLocations …Run Code Online (Sandbox Code Playgroud) 使用Builder Pattern时为什么不重用builder-object来访问对象配置?例如:
正常方式:
ObjectA(ObjectBuilder b) {
this.a = b.getA();
}
public Object getA(){
return this.a;
}
Run Code Online (Sandbox Code Playgroud)
但为什么我不能只使用它:
ObjectA(ObjectBuilder b) {
this.builder = b;
}
public Object getA(){
return this.builder.getA();
}
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
我正在创建一个包含IP地址列表的类,作为Net :: IP对象.
我将Net :: IP对象包装为子类型(IPAddress),并定义了从字符串到IPAddress的强制.然后我使用类型ArrayRef [IPAddress]向名为ip_list的类添加了一个属性,并委托给Array trait 的push方法.
use MooseX::Declare;
use Moose::Util::TypeConstraints;
use Net::IP;
subtype 'IPAddress'
=> as 'Object'
=> where { $_->isa('Net::IP') };
coerce 'IPAddress'
=> from 'Str'
=> via { Net::IP->new( $_ ) };
class IPs {
has 'ip_list' => ( traits => ['Array'],
isa => 'ArrayRef[IPAddress]',
is => 'rw',
coerce => 1,
auto_deref => 1,
default => sub { [] },
handles => {
add_ip => 'push'
}
);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试像这样调用委托方法:
my $o …Run Code Online (Sandbox Code Playgroud) 我编写了一个简单的 ASP.NET 应用程序,它作为一个简单的 MSSQL 数据库的前端。该应用程序可通过 Internet 访问。
涉及两个物理服务器:一个 WS2008R2 Active Directory 域控制器,它也运行 MSQL Server 2008 R2,另一个服务器,我的应用程序所在的网络服务器 (WS2008R2/IIS7.5)。
我的应用程序“FooPool”的应用程序池有自己的 AD 用户身份,它在“FooUser”下运行。FooUser 没有任何访问 SQL Server 数据库的权限,只有我自己的个人用户帐户“MyUser”具有该权限。
想法是尝试访问此 Web 应用程序首先使用 IIS 执行 Windows 身份验证,然后我的 Web 应用程序使用模拟访问 SQL Server 数据库。
但是我的应用程序不起作用。
我在没有接触 SQL Server 的情况下测试了应用程序,只是为了测试模拟,所以我做了 Response.Write( WindowsIdentity.GetCurrent(false).Name ); 它正确地显示了模拟 MyUser 而不是充当 FooUser 的应用程序。这适用于所有现代浏览器和整个互联网。
但是一旦它接触到 MSSQL Server,我就会收到错误消息“用户‘NT AUTHORITY\ANONYMOUS LOGON’登录失败。” 但这不应该发生,因为没有用户令牌用于匿名登录。
我已经完成了我的作业并阅读了有关 ASP.NET 中的委派和模拟的所有内容,并且我已经设置了委派:FooUser 帐户具有服务主体名称设置(我将 SPN 设置为任意字符串,这样做是否正确?) 并在 ADUC 中标记为委派。
最后,我的连接字符串启用了 SSPI,禁用了连接池,并且网络库设置为“dbmssocn”。
我还忘记了什么?
假设我有一个目前是这样的系统:
Monolithic Web App:包含自己的帐户并依赖客户端使用(本质上)HTTP BasicAuth 登录。也就是说,用户名和密码被传递到服务器。
胖客户端:登录上述应用程序,接收访问令牌,此后用于 REST API 调用。
基本上,我想将上述转换为这种系统:
SAML 2.0 IdP:身份记录系统
相同的 Web 应用程序,减去身份验证责任
胖客户端:不变。<--硬性要求
因此,至关重要的是,我不能让胖客户端执行标准的 SAML 2.0 浏览器 SSO 重定向。有什么解决办法吗?本质上,我想要与 OAuth2 相同的功能password_grant,但在 SAML 2.0 世界中。
做了一些研究,我遇到了 SAML Enhanced Client 或 Proxy,但支持似乎参差不齐。令人沮丧的是,我在 WebApp 上拥有明文形式的该死的凭证;有没有一些简单的方法可以使这项工作?
请问HTTP工具绑定做的伎俩?
我试图在Java中扩展一个Kotlin委托类并得到以下错误:
无法继承最终'衍生'
见下面的代码.
我要做的是装饰一个类的方法.
知道为什么Kotlin定义Derived为最终版?有没有办法让Derived自己不是最终的,所以我可以继承它?
Java的:
new Derived(new BaseImpl(10)) { // Getting the error on this line: `Cannot inherit from final 'Derived'`
};
Run Code Online (Sandbox Code Playgroud)
科特林:
interface Base {
fun print()
}
class BaseImpl(val x: Int) : Base {
override fun print() { print(x) }
}
class Derived(b: Base) : Base by b
Run Code Online (Sandbox Code Playgroud)
*此处的示例:https://kotlinlang.org/docs/reference/delegation.html
作为示例,我有一个 SwitUI ContentView。当你第一次做这个项目时就会出现这个。
import SwiftUI
struct ContentView: View {
var manager = TestManager()
var body: some View {
ZStack{
Color(.green)
.edgesIgnoringSafeArea(.all)
VStack {
Text("Test Text")
Button(action:{}) {
Text("Get number 2")
.font(.title)
.foregroundColor(.white)
.padding()
.overlay(RoundedRectangle(cornerRadius: 30)
.stroke(Color.white, lineWidth: 5))
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个 TestManager 来处理 Api 调用。我为该类创建了一个具有两个功能的代表。
protocol TestManagerDelegate {
func didCorrectlyComplete(_ testName: TestManager, model: TestModel)
func didFailWithError(_ error: Error)
}
struct TestManager {
var delegate: TestManagerDelegate?
let urlString = "http://numbersapi.com/2/trivia?json"
func Get(){
if let url = URL(string: urlString){ …Run Code Online (Sandbox Code Playgroud) delegation ×10
java ×3
python ×2
asp.net ×1
builder ×1
concurrency ×1
containers ×1
decorator ×1
delegates ×1
emulation ×1
federation ×1
identity ×1
ios ×1
iterable ×1
kotlin ×1
moose ×1
oop ×1
perl ×1
python-2.7 ×1
reflection ×1
saml ×1
sql-server ×1
swiftui ×1
traits ×1