小编Yve*_*omb的帖子

客户编号,订单号的最佳格式是什么?

一家大型国际公司部署了一个新的网络和MOTO(邮购和电话订单)处理系统.除此之外,您还负责设计订单和客户识别号码的格式.

您认为最好的格式是什么?请列出任何假设和考虑因素.


接受的答案

迈克尔哈伦的答案因选票最多而被选中,但请阅读其他答案和评论,因为他们让迈克尔的答案更加完整.

user-interface

52
推荐指数
9
解决办法
6万
查看次数

RabbitMQ/AMQP - MicroService架构中的最佳实践队列/主题设计

我们正在考虑为我们的微服务基础设施(编排)引入基于AMQP的方法.我们提供多种服务,比如客户服务,用户服务,文章服务等.我们计划将RabbitMQ作为我们的中央消息系统.

我正在寻找有关主题/队列等系统设计的最佳实践.一种选择是为我们系统中可能发生的每个事件创建一个消息队列,例如:

user-service.user.deleted
user-service.user.updated
user-service.user.created
...
Run Code Online (Sandbox Code Playgroud)

我认为创建数百个消息队列不是正确的方法,不是吗?

我想使用Spring和这些不错的注释,例如:

  @RabbitListener(queues="user-service.user.deleted")
  public void handleEvent(UserDeletedEvent event){...
Run Code Online (Sandbox Code Playgroud)

将"用户服务通知"作为一个队列,然后将所有通知发送到该队列是不是更好?我仍然想将听众只注册到所有事件的子集,那么如何解决呢?

我的第二个问题:如果我想要侦听之前未创建的队列,我将在RabbitMQ中获得异常.我知道我可以使用AmqpAdmin"声明"一个队列,但是我是否应该为每个微服务中的数百个队列执行此操作,因为到目前为止总是会发生队列创建?

esb amqp rabbitmq spring-amqp

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

我可以在闭源应用程序中动态调用LGPL/GPL软件吗?

我想使用GNU宽通用公共许可证下的工具(ffmpeg),某些组件的版本2.1 GNU通用公共许可证(GPL)版本2.

为此,我只在我的软件中调用它:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("lgplSoftware.exe", myParams);
p.Start();
Run Code Online (Sandbox Code Playgroud)

我不改变它,我只使用Windows的内置版软件.


维基百科说:

与GPL相关的关键争议是非GPL软件是否可以动态链接到GPL库.GPL明确要求GPL下的所有衍生代码必须属于GPL.虽然可以理解静态链接产生衍生作品,但是不清楚动态链接到GPL代码的可执行文件是否应被视为衍生作品(参见Weak Copyleft).免费/开源软件社区在这个问题上是分开的.FSF声称,如果可执行文件和GPL代码"使函数调用彼此并共享数据结构",某些其他人同意(例如Jerry Epplin),那么这样的可执行文件确实是衍生作品,而某些(例如


所有这些合法的事情我都很困惑.我也会把我的项目放到LGPL并发布源代码,但这不是我的意思.

所以问题是:我可以像现在这样使用它,还是会被一大批律师处决?

ffmpeg

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

Struts2 vs Spring 3

有谁知道Struts2和Spring 3 MVC之间的区别.我知道Struts 1和Spring 2.5之间的区别,但Struts2在Spring 3或其他方面的优势是什么.

我试过在网上寻找,但在任何地方都没有全面的答案.

java spring struts2 spring-mvc

46
推荐指数
3
解决办法
6万
查看次数

为什么我可以使用命令设计模式,而我可以轻松调用所需的方法?

我正在研究命令设计模式,我对使用它的方式很困惑.我的示例与用于打开和关闭灯的远程控制类有关.

我为什么不应该使用合闸合闸()/关机灯类,而不是单独的类和方法,最终调用合闸合闸/关机方法()方法?

我知道我的例子很简单,但这就是重点.我无法在Internet上的任何地方找到任何复杂的问题来查看命令设计模式的确切用法.

如果你知道,你解决了可以使用这种设计模式请与我共享来解决任何复杂的现实世界的问题.它帮助我和这篇文章的未来读者更好地理解这种设计模式的用法.谢谢

//Command
public interface Command {
  public void execute();
}

//Concrete Command
public class LightOnCommand implements Command {

  //Reference to the light
  Light light;

  public LightOnCommand(Light light) {
    this.light = light;
  }

  public void execute() {
    light.switchOn();        //Explicit call of selected class's method
  }
}

//Concrete Command
public class LightOffCommand implements Command {

  //Reference to the light
  Light light;

  public LightOffCommand(Light light) {
    this.light = light;
  }

  public void execute() {
    light.switchOff();
  }
} …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns command-pattern

45
推荐指数
5
解决办法
1万
查看次数

REST操作和URL API设计注意事项

我正在建立一个库存管理系统,我正忙着设计(思考)API和我的REST实现.

我有以下资源,您可以在资源上执行许多操作/操作.每个操作都将修改资源,并在某些情况下创建新资源并创建历史记录或事务.

我正在寻找专家关于URL和资源设计的可用性和可接受性的一些意见.陷阱和现实世界的例子,任何意见或批评欢迎.

我担心的是整个应用程序可能围绕这一大资源开发?我的后端堆栈将是C#和servicestack框架,对于前端,我将使用HTML和AngularJS.并不是说它有所作为.

场景1.典型操作将是:

POST /inventory/{id}/move
POST /inventory/{id}/scrap
PUT  /inventory/{id}/takeon
POST /inventory/{id}/pick
PUT  /inventory/{id}/receive
POST /inventory/{id}/hold
POST /inventory/{id}/release
POST /inventory/{id}/transfer
POST /inventory/{id}/return
POST /inventory/{id}/adjustment


{
  "userID": "",       //who is doing the actions (all)
  "tolocationID": "", //new location for inventory (move/takeon/pick/receive/transfer/return)
  "qty": "",          //qty (pick/receive/takeon/transfer/return)
  "comment": "",      //optional for transaction (all)
  "serial": "",       //(takeon/receive)
  "batch": "",        //(takeon/receive)
  "expirydate": "",   //(takeon/receive)
  "itemCode": "",     //(takeon/receive)
  "documentID": "",   //(pick/receive/return/transfer)
  "reference" :"",    //(all)
  "UOM" :"",          //(all)
  "reference" :"",    //(all)
}
Run Code Online (Sandbox Code Playgroud)

这在标准方面是否可以接受.另一种方法可能是.

情景2.

POST /inventory/{id}/move …
Run Code Online (Sandbox Code Playgroud)

architecture rest servicestack

40
推荐指数
3
解决办法
3万
查看次数

有关以编程方式启用和禁用移动数据的最新更新

虽然这是一个"重复",但目前的答案已经过时,而且大部分都不再适用.我认为如果可能的话,在这里提供一个更新的资源,以节省人们的时间,就像我刚刚做的那样研究这个问题.

我一直在谷歌上搜索有关能够在应用程序内启用和禁用移动数据的最新信息(如果无法使用wifi).

这是我能找到的最新内容之一:
你知道你不能再从一个小部件中禁用/启用棒棒糖上的数据吗?

有一个答案,我引述:

从来没有一个API.开发人员通过Reflection调用方法来使用解决方法.谷歌所做的一切都是关闭这个"利用".

还有这个讨论:

替换setMobileDataEnabled()api
这是2015年2月.

这里有这些问题:

如何在Android上禁用移动数据

这在2010年被问到,最新的答案在2014年12月更新了一个班轮.

以编程方式在android中启用/禁用数据连接

这就是2012年接受的答案.

这个问题的最新消息是什么?

它还能完成吗?

android android-permissions

38
推荐指数
4
解决办法
4万
查看次数

什么是功能分解?

功能分解,它有什么用处,有什么优点/缺点?哪些有关如何使用的实例?

language-agnostic

37
推荐指数
2
解决办法
7万
查看次数

为什么Unity忽略了非静态公共字段的初始化值?

InvokeRepeating()用来在游戏中调用方法.我调用其中一个 类InvokeRepeating()Start()方法GameObject.要设置repeatRate参数InvokeRepeating(),我传递一个名为的公共字段secondsBetweenBombDrops.

Unity忽略了我secondsBetweenBombDrops在代码中指定的值,而是在secondsBetweenBombDrops没有静态修饰符的情况下声明时使用了一些默认值(即1):

public float secondsBetweenBombDrops = 10f;
void Start() {
    InvokeRepeating("DropBomb", 1f, secondsBetweenBombDrops);
}
Run Code Online (Sandbox Code Playgroud)

但是,一旦我添加static修饰符secondsBetweenBombDrops,代码就会按预期运行,并使用正确的值10:

public static float secondsBetweenBombDrops = 10f;
void Start() {
    InvokeRepeating("DropBomb", 1f, secondsBetweenBombDrops);
}
Run Code Online (Sandbox Code Playgroud)

为什么此字段要求static修饰符使用适当的值?

在Unity检查器中,脚本组件显示secondsBetweenBombDrops为1.无论是在游戏开始时实例化预制件还是在游戏运行时创建预制实例,都会显示此默认值1.

c# serialization access-modifiers unity-game-engine

37
推荐指数
1
解决办法
7804
查看次数

框架和架构有什么区别?

我想知道框架和架构之间的区别.
例如:dotnetnuke是框架,mvc是架构.

所以如果我们把这两个作为一个例子,谁能告诉我它们之间的区别?
想知道哪一个在何时何地使用?
哪个用户需求满意度很高?

.net architecture dotnetnuke frameworks

34
推荐指数
6
解决办法
3万
查看次数