我们有一个在多个层中实现的java系统.在最低级别,有一些服务可以抽象出一系列基础架构组件,例如数据库,blob存储,处理队列等......最重要的是,我们有域层实现使用其中一个或多个的工作流服务(使用命令和复合命令模式).最后,在其上面有一个基于jax-rs(jersey)的层,它提供了根据域层的工作流实现的REST接口/协议.
我对Scala的经验是有限的,但我怀疑它可能是编写更具表现力的域层版本的好工具,因为Java代码非常冗长且有时难以调试.部分原因是命令组合和执行的控制由具体命令扩展的基类处理.事后看来,这可能不是一个理想的设计选择.
我希望这个非常高级别的描述能够说明我想要实现的目标.如果我需要更具体,请告诉我.我最感兴趣的是如何在保持基于Java的服务层的同时使用Scala构建域层.此外,关于如何在域层之上实现http/REST协议以便可以将其部署在java Web应用程序容器中的建议也将非常有趣.
我想代表超文本文档(可能使用HAL)文件夹中的子文件夹和文档的链接.因此,表示文件夹的文档应具有指向该文件夹中包含的父文件夹,子文件夹和文件的链接.对于父文件夹,<link rel ="up"href ="..">似乎是一个简单的选择.但是,我不确定什么是最适合链接到文件夹中包含的子文件夹和文档.RFC-5988中定义了几个选项.但是,我不能说哪一个最适合代表文件夹和文件树.
我可以拿出自己的价值观并制作文件.例如(使用HTML语法而不是熟悉HAL):
...
<link rel="self" href="http://example.com/some/folder/">
<link rel="up" href="http://example.com/some/">
<link rel="file" href="image1.jpg">
<link rel="file" href="image2.png">
<link rel="folder" href="subfolder/">
...
使用自定义rel-attributes有明显的缺点,即使用这些文档的应用程序需要明确支持它们.因此,我宁愿使用应用程序可以通过遵循标准和最佳实践来理解的东西.
更新:AtomPub(RFC 5023))似乎在指向集合成员的链接上使用rel ="edit".我相信他们没有sub.collection的概念.来自RFC-5988的rel ="subsection"可能是一个选项.
我想创建一个单例类,在每个使用它的线程中实例化一次.我想将实例指针存储在TLS插槽中.我已经提出了以下解决方案,但我不确定在涉及线程本地存储时是否对singelton工厂的多线程访问有任何特殊考虑.也许还有一个更好的解决方案来实现线程本地单例.
class ThreadLocalSingleton 
{
    static DWORD tlsIndex;
public:
    static ThreadLocalSingleton *getInstance()
    {
        ThreadLocalSingleton *instance = 
            static_cast<ThreadLocalSingleton*>(TlsGetValue(tlsIndex));
        if (!instance) {
            instance = new ThreadLocalSingleton();
            TlsSetValue(tlsIndex, instance);
        }
        return instance;
    }
};
DWORD ThreadLocalSingleton::tlsIndex = TlsAlloc();
Tls*功能当然是win32特定的,但便携性不是这里的主要问题.您对其他平台的想法仍然很有价值.
主要编辑:我最初询问在这种情况下使用双重检查锁定.然而正如DavidK指出的那样,无论如何都要在每个线程的基础上创建单例.
剩下的两个问题是:
是否适合回复TlsGetValue/TlsSetValue以确保每个线程获得一个实例并且每个线程只创建一次实例?
是否可以注册一个回调,允许我在该线程完成时清理与特定线程关联的实例?
在Microsoft VC2005和g ++编译器中,以下结果都会导致错误:
在win32 VC2005上:sizeof(wchar_t)是2
wchar_t *foo = 0;
static_cast<unsigned short *>(foo);
结果是
error C2440: 'static_cast' : cannot convert from 'wchar_t *' to 'unsigned short *' ...
在Mac OS X或Linux上g ++:sizeof(wchar_t)为4
wchar_t *foo = 0;
static_cast<unsigned int *>(foo);
结果是
error: invalid static_cast from type 'wchar_t*' to type 'unsigned int*'
当然,我总是可以使用reinterpret_cast.但是,我想了解为什么编译器认为static_cast到适当的整数类型是非法的.我确信有充分的理由......
在可以通过不同的init ...方法初始化的objective-c类中,将所有初始化程序通用的初始化代码收集到从其他init*方法调用的一个常用方法(或者有时也来自awakeFromNib).
有关如何命名此方法的约定?初始化?initCommon?...?
c++ ×2
architecture ×1
casting ×1
coding-style ×1
css ×1
dom ×1
html ×1
java ×1
javascript ×1
objective-c ×1
rest ×1
scala ×1
singleton ×1
wchar-t ×1
web ×1
winapi ×1