标签: declarative

.NET中的声明性线程安全性

我需要使现有的应用程序线程安全.在适当的情况下(见下文),我决定在整个业务对象图中使用一个ReaderWriterLock.所有方法/属性必须如下所示:

public int MyReadOperation(string inputParam)
{
   rwLock.AcquireReaderLock(10000);
   try
   {
      // do all read operations
      ...
   }
   finally
   {
      rwLock.ReleaseReaderLock();
   }
}

public void MyWriteOperation(string input)
{
   rwLock.AcquireWriterLock(10000);
   try
   {
      // do all write operations
      ...
   }
   finally
   {
      rwLock.ReleaseWriterLock();
   }

}
Run Code Online (Sandbox Code Playgroud)

但是我有很多方法可以覆盖,我从复制/粘贴的想法中吓坏了.受MethodImplAttribute的启发,我希望有一个这样的代码,同时表现为上面的代码:

[ReadOperation]
public int MyReadOperation(string inputParam)
{
   // do all read operations
   ...
}

[WriteOperation]    
public void MyWriteOperation(string input)
{
   // do all write operations
   ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在进入属性或方法之前/之后中断线程执行并添加线程安全预防措施?或者以某种方式利用C#的函数式语言特性,将方法的生产体嵌入到通用的ReaderWriterLock中获取"框架"?

一点背景:

我正在开发一个项目,通过.NET Remoting公开数据载体业务对象.但是,这些数据类不是可序列化的,而是MarshalByRef-s.这意味着所有客户端实际上读/写相同的业务对象.这是不可改变的,它是刻在石头上的.线程安全的希望是这些远程业务对象在远程客户端的眼中是只读的(认为它们会循环许多列表)并且所有写入操作都很好地分成专用的外观.我希望罕见的写入和频繁的读取.业务对象高度连接,它们非常"图形化".

.net remoting multithreading functional-programming declarative

4
推荐指数
2
解决办法
671
查看次数

SQLAlchemy column_property 基础知识

我有两个模型:

class Report(Base):
    __tablename__ = 'report'
    id = Column(Integer, primary_key=True)

class ReportPhoto(Base):
    __tablename__ = 'report_photo'
    id = Column(Integer, primary_key=True)
    report_id = Column(Integer, ForeignKey(Report.id), nullable=False)

    report = relationship(Report, uselist=False, backref=backref('report_photo', uselist=True))
Run Code Online (Sandbox Code Playgroud)

我想在 Report 模型中添加一列,表明 ReportPhoto 中是否有任何记录。我尝试以这种方式使用column_property

class Report(Base):
    __tablename__ = 'report'
    id = Column(Integer, primary_key=True)

    has_photo = column_property(
        select(ReportPhoto.any())
    )
Run Code Online (Sandbox Code Playgroud)

但得到一个错误NameError: name 'ReportPhoto' is not defined。我该如何解决这个问题?

python orm sqlalchemy declarative

4
推荐指数
2
解决办法
5097
查看次数

使用 jq 选择多个字段

我正在尝试使用以下 jq 过滤器过滤 docker-machine 的输出。

docker-machine inspect default | jq '{ConfigVersion, .Driver.{MachineName, CPU, Memory}, DriverName}'
Run Code Online (Sandbox Code Playgroud)

第一个命令的原始 json 在这里

{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "192.168.99.100",
        "MachineName": "default",
        "SSHUser": "docker",
        "SSHPort": 52314,
        "SSHKeyPath": "/Users/apatil/.docker/machine/machines/default/id_rsa",
        "StorePath": "/Users/apatil/.docker/machine",
        "SwarmMaster": false,
        "SwarmHost": "tcp://0.0.0.0:3376",
        "SwarmDiscovery": "",
        "VBoxManager": {},
        "HostInterfaces": {},
        "CPU": 2,
        "Memory": 5120,
        "DiskSize": 20000,
        "NatNicType": "82540EM",
        "Boot2DockerURL": "",
        "Boot2DockerImportVM": "",
        "HostDNSResolver": false,
        "HostOnlyCIDR": "192.168.99.1/24",
        "HostOnlyNicType": "82540EM",
        "HostOnlyPromiscMode": "deny",
        "UIType": "headless",
        "HostOnlyNoDHCP": false,
        "NoShare": false,
        "DNSProxy": true,
        "NoVTXCheck": false,
        "ShareFolder": ""
    },
    "DriverName": "virtualbox", …
Run Code Online (Sandbox Code Playgroud)

json declarative object jq

4
推荐指数
1
解决办法
4255
查看次数

你能在 QML 声明性代码中发现错误吗?

我的 QML 文件中有一个(声明性)行记录错误,我想捕获它并记录某些变量以尝试找出发生了什么。该行类似于(包含在 aRepeater因此使用index):

a: ((n === -1) || (n - p > 7) || (index >= t)) ? "" : b[p+index].c
Run Code Online (Sandbox Code Playgroud)

(不,这些不是我的实际变量名,我已经重命名它们以防止信息泄漏 - 实际名称并不重要)。

运行代码时,我偶尔会收到错误:

file:///path/to/SomeFile.qml:7: TypeError: Cannot read property 'c' of undefined
Run Code Online (Sandbox Code Playgroud)

让我相信当a基于其他变量修改字段时,这些变量之一在某种程度上是错误的。

我知道try/catch程序QML 代码中,但我不确定如何为声明性代码做类似的事情(或者即使可能)。

有没有办法捕获该错误并打印出发生错误时存在的所有相关变量?

error-handling qt declarative qml

4
推荐指数
1
解决办法
270
查看次数

声明式和命令式模式是一种设计模式吗?

我读了这句话

“C# 支持纯度模式”

...在 O'Reilly 的 C# 8.0 in a Nutshell 一书中。它继续说

“函数式编程的核心是避免使用值发生变化的变量,而支持声明式模式。”

我试图理解什么是声明式模式。但是我找不到声明模式作为设计模式的任何子类别。

任何人都可以向我解释声明式模式是否与行为、创建和结构等设计模式不同?

c# design-patterns declarative

4
推荐指数
1
解决办法
208
查看次数

Jenkinsfile声明性脚本git插件:如何设置浅克隆和深度属性

我在 Jenkinsfile 中有一个声明性管道,我可以在 git 插件中添加浅克隆选项,深度 = 1,超时 = 30。目前我正在运行的设置是:

            git(
                credentialsId: 'MY_GIT_CREDENTIALS', 
                branch: "${params.BRANCH}", 
                url: "${env.BBSCM}"
            )
Run Code Online (Sandbox Code Playgroud)

有人可以帮我在语句中添加三个所需的参数吗?

plugins declarative jenkins-pipeline

4
推荐指数
1
解决办法
6747
查看次数

GUI声明性语言实现

我最近开始使用某种形式的声明性语言开发一个关于GUI构建的项目.我的意思是我需要描述对象的层次结构,而不指定将用于"显示"该层次结构的GUI小部件的类型.例如,对于某些现有层次结构H,使用JSON表示法(或类似的东西):

H = 
{
    "title" : "Label_1"
    "children" : 
    [
        {
            "title" : "Label_2"
            "children": 
            [
                {
                    "title": "Field_A"
                    "type": "Integer"
                    "value": 10
                },

                {
                    "title": "Field_B"
                    "type": "String"
                    "value": "YES"
                }
            ]
         }
    ]
}
Run Code Online (Sandbox Code Playgroud)

有人可以构建一个简单的窗口,通过按下标有"Label_1"的按钮向用户显示.然后该窗口可以标题为"Label_2",并且具有标记为"Field_A"和"Field_B"的两个字段,分别接受整数和布尔值.

其他人可以将此层次结构放在树列表中,例如

--------------------------------------------------------
>Label_1                |
    >Label_2            |
        >Field_A        |   10
        >Field_B        |   YES
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是,我是否必须构建某种形式的语言解析器来实现这样的目标?我可以使用JSON吗?虽然我不需要支持复杂的层次结构,但是需要支持互斥的层次结构(类似于单选按钮启用/禁用选项).我觉得它看起来像某种形式的语言解析与几个运算符.不要误解我,我是机械工程背景,我不是一个经验丰富的程序员.

提前感谢您的意见和帮助.

c++ user-interface declarative

3
推荐指数
2
解决办法
1372
查看次数

用于从另一个表中求值的SQLAlchemy子查询

当需要返回值(即未在WHERE中使用)时,我正在努力理解在SQLAlchemy中执行子查询的正确语法.

我正在使用声明式方法.

有两种模型使用:

class ProjectInvoices(Base):
    InvoiceID = Column(Integer(unsigned=True), default=0, primary_key=True, autoincrement=True)
    MasterProjectID = Column(Integer(unsigned=True), index=True, nullable=False)
    ExpenseAmount = Column(Numeric(10, 2), default=0)
    HoursAmount = Column(Numeric(10, 2), default=0)
    IsVoid = Column(Boolean, default=0, index=True)
    IsSubmit = Column(Boolean, default=0, index=True)

class ProjectMasters(Base):
    MasterProjectID = Column(Integer(unsigned=True), default=0, primary_key=True, autoincrement=True)
    MasterProjectName = Column(Unicode(255))
    MasterProjectMemo = Column(UnicodeText)
    IsActive = Column(Boolean, default=0, index=True)
Run Code Online (Sandbox Code Playgroud)

查询的要点是通过使用子查询对相关发票求和来确定每个项目的当前发票金额.还有其他原因在子查询中完成,而不仅仅是一个连接,所以我真的需要弄清楚子查询问题.

这是我当前SA查询的一个示例:

sqry = session.query(
  func.sum(
    func.ifnull(ProjectInvoices.ExpenseAmount, 0) 
    + func.ifnull(ProjectInvoices.HoursAmount, 0))).label('billed_total')
).filter(and_(ProjectInvoices.IsVoid == 0, ProjectInvoices.IsSubmit == 1)
).subquery()

result = session.query(
  ProjectMasters.MasterProjectID, 
  ProjectMasters.MasterProjectName, 
  sqry.columns.billed_total.label('invoice_total')
).filter(ProjectMasters.IsActive …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy declarative subquery

3
推荐指数
1
解决办法
2881
查看次数

如何通过删除特定的分隔(Haskell)将列表拆分为列表

我是Haskell的新手,我有一个问题.我需要编写一个函数,将列表拆分为列表中的"分离".

haskell split list declarative

3
推荐指数
1
解决办法
1115
查看次数

jQuery迭代函数

每个 jQuery迭代器函数都有类似这样的语法:

.each(function(index, element))
Run Code Online (Sandbox Code Playgroud)

这似乎意味着匹配此声明的函数必须采用2个参数.就像是:

function my_func(index, element){
  alert(index+":"+element);
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这给出了两个可能的声明:

$("li").each(my_func);
Run Code Online (Sandbox Code Playgroud)

要么

$("li").each(function(index, element) {alert(index+":"+element);});
Run Code Online (Sandbox Code Playgroud)

第一个让我困惑,因为我没有看到indexelement传递给我my_func.在jQuery中是否有一些魔法知道它提供了my_func2个参数each

其次,如果我宣布了

var my_func= function(index, element){
  alert(index+":"+element);
}
Run Code Online (Sandbox Code Playgroud)

这会改变什么.我的理解是,第一个是声明式,第二个是表达式,但是,在这种情况下,它们的行为应该相同吗?

最后,each我看到的大多数实现都是这样的:

$("li").each(function(){alert(this)});
Run Code Online (Sandbox Code Playgroud)

each回调的所有参数都是可选的吗?

javascript jquery expression function declarative

3
推荐指数
1
解决办法
350
查看次数