当我一开始看到连接继承时,它对我来说就像一个组合,但人们一直将其命名为继承。然而,类使用原型来创建将对象连接在一起的原型链。现在的问题是,如果串联继承和类继承都做同样的事情,该使用哪一个?
这是两种场景串联继承的示例
function Person(name, address) {
const _name = name
const _address = address
const toString = () => `name: ${this.name}, address: ${this.address}`
return {
_name,
_address,
toString
}
}
function Employee(name, address, salary) {
const getAnnualSalary = () => 12 * salary
return Object.assign({ getAnnualSalary }, Person(name, address))
}
Run Code Online (Sandbox Code Playgroud)
类继承
class Person {
constructor(name, address) {
this.name = name
this.address = address
}
toString() { return `name: ${this.name}, address: ${this.address}` }
}
class Employee extends Person {
constructor(name, address, …Run Code Online (Sandbox Code Playgroud) 是否可以将数据从播种机传递到工厂?
这是我的PictureFactory:
class PictureFactory extends Factory{
protected $model = Picture::class;
public function definition($galleryId = null, $news = false){
if (!is_null($galleryId)){
$galley = Gallery::find($galleryId);
$path = 'public/galleries/' . $galley->name;
$newsId = null;
}
if ($news){
$path = 'public/newsPicture';
$newsId = News::all()->random(1);
}
$pictureName = Faker::word().'.jpg';
return [
'userId' => 1,
'src' =>$this->faker->image($path,400,300, 2, false) ,
'originalName' => $pictureName,
'newsId' => $newsId
];
}
}
Run Code Online (Sandbox Code Playgroud)
我在数据库播种器中像这样使用它:
News::factory(3)
->has(Comment::factory()->count(2), 'comments')
->create()
->each(function($news) {
$news->pictures()->save(Picture::factory(null, true)->count(3));
});
Run Code Online (Sandbox Code Playgroud)
但$galleryId和$news不传递到 …
我正在使用工厂模型类在修补程序上使用此命令插入一些虚拟数据:当我运行时
composer dump-autoload,
php artisan tinker,
Page::factory(10)->create()
Run Code Online (Sandbox Code Playgroud)
然后这个错误显示
PHP 错误:在/var/www/html/laravel/laravel8-blogeval()'d第 1 行代码中未找到“Page”类
我的模型文件位置app\Models\Page.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Page extends Model {
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'slug',
'body',
'excerpt',
'image',
'thumb',
'view_count',
'user_id',
'meta_keywords',
'meta_description',
'social_image',
'order',
'published_at',
'is_active',
'is_destroy'
]; }
Run Code Online (Sandbox Code Playgroud)
我的工厂文件位置 database/factories/PageFactory.php
<?php
namespace Database\Factories;
use App\Models\Page;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class PageFactory …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我有很多相关的Info类,我正在考虑通过使用AbstractInfo类和一堆派生类来构建层次结构,根据需要覆盖AbstractInfo的实现.然而事实证明,在C++中使用AbstractInfo类然后创建一个派生对象并不那么简单.(见这个问题,评论最后的答案)
我打算创建一个工厂类,它创建一个Info对象并始终返回一个AbstractInfo对象.我从C#中知道你可以用接口做到这一点,但是在C++中看起来有些不同.
向下铸造变得复杂,似乎容易出错.
有没有人对我的问题有更好的建议?
我想向我们的项目介绍CDI(Weld),现在手动构建的对象遇到了一些麻烦.
所以我们有一些实现IReport接口的类,它有一个应该注入的字段.因为所有这些类是由产生这是在运行时零ReportFactory一类ReportController.
private Map<String,Object> generateReport(ReportInfo ri, ...) {
// some input validation
IReport report = ReportControllerFactory.getReportInstance( ri.getClassName() );
// ...
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将@Produces注释与另一个自定义注释一起使用ReportControllerFactory,但是如何在一个方法中使用@Injectfor只能在完成一些验证之后创建的变量?我将如何提交参数?构造时对象是未知的.ri.getClassName()riReportController
非常感谢你!
亲切的问候,塞巴斯蒂安
编辑于2011年7月8日(10:00):
ReportFactory类:
public static IReport getReportInstance( String className ) throws ReportException {
IReport report = null;
try {
Class<?> clazz = Class.forName( className );
report = (IReport) clazz.newInstance();
}
catch ( Exception e ) { … }
return report; …Run Code Online (Sandbox Code Playgroud) 我最近开始了一个带有现有数据库(Oracle)和MVC 4的项目.很多编码已经发生..但代码中没有"策略"......只有DB - > ORM - > Controller.所以我试图为开发添加一些耀斑以及实践一些DDD开发技术.
我已经定义了一些聚合根,每个都有一个存储库,用于处理保存和删除(及其子代)等.其中一个聚合根引用另一个聚合根,它通过它来处理它的"子对象"它.
例:
A Client has one or more purchase orders which has Line Items,
if a client wants to add a line item to the purchase order,
it has to go through the purchase order.
Run Code Online (Sandbox Code Playgroud)
那很好..客户端聚合根,采购订单聚合根.
现在,一些服务也出现了,就像修改采购订单状态的服务一样,它消除了采购订单AR的负担,并且它很好,干净且有用(它可以被其他"事物"用来更新采购订单的状态),(也许应该是采购订单AR的一部分?一个小细节..)
存储库目前正在完成从数据库中保存数据并用数据"填满" AR的工作.当AR "保存"它时,存储库会保存任何需要保存的东西.采购订单存储库由客户AR使用,因此客户可以加载它可能包含的任何采购订单.希望我走在正确的轨道上.
现在,输入MVC.所以我也有了一些ViewModel,它基本上是显示需要向用户输出的内容的定义.Automapper已经证明了frickin非常棒,所以我可以"自动映射"到视图模型.没有大脑需要,完美..
现在,实施细节真的让我失望..
控制器当前正在通过客户工厂工作,客户工厂返回客户AR,然后可以执行采购订单列表控制器需要执行的任何操作,即管理相关的采购订单(作为一个整体,而不是采购订单详细信息或这种情况下的数据).
所以现在我想确保这是正确的...因为我看到很多例子都让控制器使用存储库,而不是工厂,但我也看到工厂被推荐用于创建AR ..这让我相信在示例中,控制器正在处理聚合根,但是这需要"消费者"必须查询AR才能获得AR:
喜欢:
Get the Client Aggregate where the ClientID is 15
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
get the Client …Run Code Online (Sandbox Code Playgroud) 我有一个复杂的类,我想强制用户使用std :: unique_ptr,我认为最好的方法是创建一个返回std :: unique_ptr并隐藏ctor的工厂方法.
问题是,我添加的工厂方法越多,标题和代码开始看起来越脏.
所以我想也许如果我创建一个新的ClassFactory类,其中包含所有工厂方法,它看起来更干净,每次我想添加一个新的工厂方法我只是编辑工厂类并完成它(保留原始班级干净).
例如:
class Widget
{
private:
friend class WidgetFactory;
Widget(){}
Widget(const Widget& other) = delete;
Widget& operator = (const Widget& other) = delete;
std::string _msg;
public:
void printMessage(){ std::cout << _msg << std::endl; }
};
class WidgetFactory
{
public:
static std::unique_ptr<Widget> create(){ auto w = std::unique_ptr<Widget>(new Widget);
w->_msg = "hello world!"; return w; }
};
Run Code Online (Sandbox Code Playgroud)
然后是用户:
int main(int argc, char** argv)
{
auto w = WidgetFactory::create();
w->printMessage();
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用私有令牌使ctor显式公开,这样我就可以使用std :: make_shared/unique.
但我不记得之前看过这种模式,所以我的问题是,这是一个好习惯吗?你介意从你的同事那里看到这样的代码吗?
提前致谢.
目前我的代码需要类转换
val dataWriter: BytesDataWriter = createDataWriter
def createDataWriter(p: SomeClass) =
p.create_datawriter().asInstanceOf[BytesDataWriter]
Run Code Online (Sandbox Code Playgroud)
该create_datawriter方法将返回超类DataWriter.asInstanceOf我尝试了这种方法,而不是使用它
val dataWriter: BytesDataWriter = createDataWriter(p) match {
case writer: BytesDataWriter => writer
case _ => throw new ClassCastException
}
Run Code Online (Sandbox Code Playgroud)
这太冗长了,如果情况不起作用.是否有更好的替代类铸造?
我正在进行模拟,它需要创建多个相似的模型.我的想法是有一个名为Model的类,并使用静态工厂方法来构建模型.例如; Model :: createTriangle或Model :: createFromFile.我从之前的Java代码中获取了这个想法,并且正在寻找在C++中实现它的方法.
这是我到目前为止提出的:
#include <iostream>
class Object {
int id;
public:
void print() { std::cout << id << std::endl; }
static Object &createWithID(int id) {
Object *obj = new Object();
obj->id = id;
return *obj;
}
};
int main() {
Object obj = Object::createWithID(3);
obj.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
关于这个的一些问题:
我似乎在将json从我的工厂发送到控制器时遇到了问题
这是我的工厂
.factory("UserService", function($http) {
var LevelsHere;
$http.get("/assets/images/generated.json").success(function(data){
LevelsHere = data;
return LevelsHere;
});
return {
all: function() {
return LevelsHere;
},
first: function() {
return LevelsHere[0];
}
};
})
Run Code Online (Sandbox Code Playgroud)
我只是试图用这个工厂发送json对象(或者它的一部分).我可以在http get里面调试console.log似乎抓住了json就好了.我似乎已经撞墙了,任何帮助都会非常感激.我希望所有广告的第一个功能都能正常运行.谢谢!
我首先通过使用json字符串硬编码levelHere来获得成功,例如var levelsHere = [{"stuff in here"}],但是当我将它移到$ http时它不起作用.
factory ×10
c++ ×3
casting ×2
laravel ×2
php ×2
angularjs ×1
cdi ×1
composition ×1
constructor ×1
friend ×1
inheritance ×1
java ×1
javascript ×1
jboss-weld ×1
oop ×1
polymorphism ×1
repository ×1
scala ×1
tinker ×1