我想确保没有人能够从我的类层次结构中删除任何对象,然后使用提供的Destroy方法.
基本原理是来自此层次结构的任何对象在开始销毁自身之前需要使用特殊的写入互斥锁,以确保在另一个线程使用它们时不会删除对象.
我知道我可以通过引用计数来防止这个问题,但对于潜在的性能影响和内存分配而言,这对系统来说将是一个更大的变化.
有没有办法以某种方式有效/巧妙地使所有的析构函数受到保护,以便子类可以调用他们的父母析构函数,而外人必须使用Destroy?
我提出的一个安全(即它不会腐烂)的解决方案是将所有析构函数设为私有并将每个派生类声明为基类的朋友,但我更喜欢更优雅,更少手动和更容易的东西维护(不需要修改基类以便从中派生).
有这样的东西吗?也许一些聪明的伎俩会让事情像我一样"有效"?
PS.我现在选择的解决方案是不阻止任何人在所有情况下调用delete(只是在基类中保护它)但检测到这种情况并在基类析构函数中调用abort.
我知道Swift中推荐的方法是使用:
class Address {
var firstLine : String?
var secondLine : String?
}
Run Code Online (Sandbox Code Playgroud)
但有时我看到其他开发人员以这种方式编写代码:
class Address {
var firstLine : String = ""
var secondLine : String = ""
}
Run Code Online (Sandbox Code Playgroud)
这是一种nil不受推荐的方式,因为无论什么时候你都会崩溃而且没有任何出口让你恢复.是对的吗?或者有一些使用非默认选项的用例可能很好.如果是那么那么?
我看到了另一个问题,问题是效率而不是更适合你的需求.我正在寻找答案,其中说"这是一个使用非选项的好地方,这是一个使用期权的好地方".有时我看到人们到处都是倾销选项,这让我觉得我们不需要非选项吗?有时候我会看到人们试图尽可能地避免选项,并且只是以Objective-C风格编写代码.
上述问题的答案并不代表非选择性良好的有效案例.这是无声的.至于选择选项:我猜测通过网络电话填充的模型,选项是正确的选择,因为你不知道它是否是nil.
我有一个问题,有点理论:
假设,我有以下课程:
interface ReportInterface {
void execute();
}
class Report implements ReportInterface {
private final Repository rep;
Report(Repository ref){
this.rep = ref;
}
public void execute(){
//do some logic
}
}
class ReportWithSetter implements ReportInterface {
private final Repository rep;
private String release;
ReportWithSetter(Repository ref){
rep = ref;
}
public void execute(){
if (release == null) throw IlligalArgumentException("release is not specified");
//do some logic
}
public void setRelease(String release){
this.release=release;
}
}
Run Code Online (Sandbox Code Playgroud)
第二个报告需要一个额外的参数释放才能正常工作,但我的接口定义为没有execute方法参数,所以我使用 setter 方法解决它,所以它看起来像:
ReportWithSetter …Run Code Online (Sandbox Code Playgroud) 我观察到组件具有统一,整洁和良好排列的代码结构.是自动安排还是手动?
有没有办法让它自动化?像Delphi中的Code Completion一样?
我正在使用Delphi 7,2009,2010 XE
我学过C++和Qt4.我写了一个包含3000行的图形程序,我发现保持代码简单,透明和结构良好是非常复杂的.我喜欢设计模式等,因为它们非常有效,有助于保持代码更简单,更透明.现在我要编写另一个"更大"的应用程序,但我希望有一个易于编辑的清晰代码,并且添加一些增强功能不会是大问题.
我正在寻找一些指南,模式,手册或经验,其中说明如何在图形应用程序中构建代码,以便在业务逻辑和未来编辑中进行测试(单元和集成),从而实现良好的结构.
如果本手册将针对C++和Qt,它会更好,但它不是主要要求.
谢谢你的提示.
要测试正则表达式是否匹配并将其分配给变量(如果不匹配),或者将其分配给某个默认值(如果不匹配),我目前正在执行以下操作:
var test = someString.match(/some_regex/gi);
var result = (test) ? test[0] : 'default_value';
Run Code Online (Sandbox Code Playgroud)
我想知道是否有任何方法可以在JS中使用一行代码执行相同的操作.
澄清:我并不是想让我的代码更小,而是在我定义一些变量的地方使它变得更清晰:
var foo = 'bar',
foo2 = 'bar2',
foo_regex = %I want just one line here to test and assign a regex evaluation result%
Run Code Online (Sandbox Code Playgroud) 我需要在插入数据库之前验证一些数据,为此我创建了一个从实体返回无效字段的小服务。验证单个实体时它工作正常。
class EntityValidator
{
protected $validator;
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function validate($entity)
{
$errors = $this->validator->validate($entity);
$response = null;
if ($errors->count()) {
foreach ($errors as $error) {
$response[$error->getPropertyPath()] = $error->getMessage();
}
}
return $response;
}
}
Run Code Online (Sandbox Code Playgroud)
但我一直在努力验证更复杂的问题,例如:这是一个restful api端点,它接收带有user_id和帖子正文中百分比的json,它将验证实体以查看它是否与symfony验证器约束映射正确。
public function create(Request $request, EntityValidator $entityValidator)
{
$data = json_decode($request->getContent(), true);
$entityExample = new EntityExample();
$entityExample
->setUserId($data['user_id'])
->setPercentage($data['percentage'])
;
$errors = $entityValidator->validate($entityExample);
// .. do other things ..
return new JsonResponse($errors);
}
Run Code Online (Sandbox Code Playgroud)
但是假设我收到一个数据数组,并且我要一次插入多行,并且有一个业务逻辑说“用户的百分比总和需要为 100”
public function …Run Code Online (Sandbox Code Playgroud) php model-view-controller code-structure symfony symfony-validator
当我有这样的头文件时:
#ifndef GAMEVIEW_H_
#define GAMEVIEW_H_
#include <SDL/SDL.h>
class GameView
{
public:
GameView();
virtual ~GameView();
virtual void Update() = 0;
virtual void Render(SDL_Surface* buffer) = 0;
};
#endif /* GAMEVIEW_H_ */
Run Code Online (Sandbox Code Playgroud)
我需要创建一个.cpp这样的文件:
#include "GameView.h"
GameView::~GameView()
{
}
GameView::GameView()
{
}
Run Code Online (Sandbox Code Playgroud)
这有点愚蠢.只是一个空构造函数和解构函数的.cpp文件.我想在头文件中简单地实现该方法.那更清洁了.
这该怎么做?
我知道我们可以这样做:
const a = { b: 1, c: 2 }
const A = { ...a };
// A { b: 1, c: 2 }
Run Code Online (Sandbox Code Playgroud)
但是我们如何使用这种方法将数据传递为this值呢?
例如我们有一个class A {}并且想要动态地将对象属性设置为this. 通常的方法是使用Object.defineProperties可能for...in循环:
const a = { b: 1, c: 2 }
class A {
constructor(obj){
for (const k in obj)
Object.defineProperty(this, k, { value: obj[k] });
}
}
new A(a);
// A { b: 1, c: 2 }
Run Code Online (Sandbox Code Playgroud)
所以我在想,既然我们现在有了语法糖,我们如何将它用于上面的例子?
编辑
我在这里谈论扩展运算符语法 …
我有设计页眉,页脚视频播放器视图等作为单独的文件。如何在每页中包含这些内容?
我尝试过这种方法。但不起作用。
我有一些结构如下的结构:
if (someStatement)
{
//...
if (SomeOtherStatement)
{
//..., possibly more cases like this
}
else
{
//goto warning;
//would otherwise repeat
//the MessageBox.Show here
}
}
else
{
//goto warning;
}
//...
warning:
MessageBox.Show("some warning");
Run Code Online (Sandbox Code Playgroud)
因为我厌恶复制代码,这是goto的少数有用的应用程序之一还是有更好的结构我可以使用?
实现方法调用的最佳/最佳方法是什么?
例如:从下面通常被认为是最佳实践.如果两者都不好,那么什么被认为是最佳实践.
选项1 :
private void BtnPostUpdate_Click(object sender, EventArgs e)
{
getValue();
}
private void getValue()
{
String FileName = TbxFileName.Text;
int PageNo = Convert.ToInt32(TbxPageNo.Text);
// get value from Business Layer
DataTable l_dtbl = m_BLL.getValue(FileName, PageNo);
if (l_dtbl.Rows.Count == 1)
{
TbxValue.Text = Convert.ToInt32(l_dtbl.Rows[0]["Value"]);
}
else
{
TbxValue.Text = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
选项2:
private void BtnPostUpdate_Click(object sender, EventArgs e)
{
String FileName = TbxFileName.Text;
int PageNo = Convert.ToInt32(TbxPageNo.Text);
int Value = getValue(FileName, PageNo);
TbxValue.Text = Value.ToString();
}
private int getValue(string …Run Code Online (Sandbox Code Playgroud) 我熟悉Java Web容器,其中Web应用程序作为war文件部署.
我很困惑如何在Node.js中部署CSS,JS,HTML,图像(等等).怎么做到这一点?
我对Node.js的了解非常有限.提前致谢!
web-applications code-structure node.js application-structure
code-structure ×13
c++ ×3
c# ×2
javascript ×2
.net ×1
assign ×1
code-reuse ×1
delphi ×1
destructor ×1
ecmascript-6 ×1
goto ×1
header-files ×1
java ×1
methods ×1
node.js ×1
optional ×1
php ×1
qt4 ×1
react-native ×1
regex ×1
swift ×1
symfony ×1
var ×1